线程

多线程线程并发问题


死锁

4个必要条件以及解决方案

  • 互斥:一般不会破坏互斥条件。
  • 请求保持:将申请所有共享资源当成一个原子操作。
  • 不可剥夺:当线程申请不到共享资源时,释放自己持有所有共享资源。
  • 循环等待:可以顺序申请资源来解决。

条件变量:需要用互斥锁一起使用

//1.初始化
pthread_cond_init();
pthread_cond_t cond = PTHREAD_COND_IN;

//2.等待条件成立的步骤
pthread_cond_timedwait();
pthread_cond_wait();

//3.唤醒阻塞线程
pthread_cond_signal(pthread_cond_t *cond);//至少唤醒一个
pthread_cond_broadcast(pthread_cond_t *cond);//唤醒所有等待该条件变量的线程
//4.销毁
pthread_cond_destory();
  • pthread_cond_wait()执行流程
    • 释放互斥锁,然后阻塞线程
    • 当函数返回时,一定要再次获得锁。但是条件变量不一定成立。这是由于唤醒线程两个API,signal和bradncast。
posted @ 2024-05-27 18:43  炫炫子  阅读(3)  评论(0编辑  收藏  举报