03 线程池线程同步之线程通信

竞态条件:多个并发执行的线程或者进程访问共享资源的时候,执行的顺序不确定性导致了数据的交叉访问和竞争。

竞态条件通常出现在以下情况下:

        1.共享资源的读写:多个线程同时读取和写入共享资源,可能导致数据的不一致性;

        2.程序的控制流程操作:多个线程或进程在没有适当同步的情况下改变程序的控制流,可能导致意外的执行路径和结果;

        3.使用了不可重入函数:多个线程同时调用一个不可重入函数,该函数依赖于共享的状态,可能导致结果的不确定性。

如果多线程环境不存在竞态条件==》可重入;存在竞态条件==》不可重入。

线程互斥:

  • mutex互斥锁

        可以通过引入互斥锁来保证每一次只有一个线程能够进入临界区代码段,保证原子操作;

只有栈空间是每个线程私有的,同一个进程里面的线程是共享这个进程的堆内存的数据段(全局变量)

  • atomic原子类型

线程通信:

  • condition_variable 条件变量

 生产者消费者模型:

  • semaphore 信号量

        控制精度不如条件变量, 可以看作是一个资源计数没有限制的mutex互斥锁

 信号量就不用像是互斥锁只有0,1变化了,它可以是1,2,3,4.。。。。。

        也有二元信号量 semaphore sem(1); 资源计数0,1:可以完成和mutex互斥锁相同的线程互斥操作。但是也有区别:mutex只能是那个线程获取锁那个线程释放,sem不同,sem.wait()和sem.post()可以处在不同的线程中调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值