欢迎光临散文网 会员登陆 & 注册

多线程编程总结1

2023-09-11 23:43 作者:_任逍遥  | 我要投稿

   先让我们来看个例子:

    这段代码看似没问题,其实犯了一个很严重的错误,也是今天开发过程中出现的问题。

    首先,thread创建了一个线程,线程在获得到锁后,调用条件变量的wait方法对线程进行阻塞,同时释放锁。于是乎,系统调度进行上下文切换至main函数的主线程,这可能是我们所想的“理想调度顺序”。

    但是,换个思维去想,操作系统也可能先调度main函数的主线程,等到t.join()被阻塞后,再调度t线程,这样就会出现一个问题:没有任何一个线程被阻塞在条件变量上时,就发送唤醒线程的通知了。这样会导致咱们的t线程会一直阻塞,永远无法被唤醒(因为唤醒通知早早的就被发送出去了........)。

    我们需要改进以下代码:

    通过while避免被notify_one提前唤醒后,程序被阻塞在一个永远不可能被唤醒的线程上,为什么不用if来作判断?就不多说了,就是用来应付类似多个消费者的情况。

多线程编程总结1的评论 (共 条)

分享到微博请遵守国家法律