QT、boost线程的挂起

前一阵子写了一个后台不断求质数的程序。一共实现两个功能:一、运行的开始/暂停;二、重新开始计算。其中开始/暂停部分需要挂起负责查找质数的线程。但是我看了好几遍文档发现居然没有挂起线程的函数……

搜索了很久发现,原来POSIX线程模型中是不包括挂起功能的。因为挂起一个现成会导致该线程占有的资源得不到释放。只要线程还在挂起,那么它占有的资源就一直处于被占用状态。所以POSIX模型把这个权利交给了操作系统的设计者。

于是,解决方案就是使用锁。

boost和QT都是使用了POSIX线程模型,所以都是没有挂起函数的。


于2012-02-06添加:

经实践后发现,QT的QMutex是不允许在线程 B中解锁线程A中锁定的QMutex对象的。所以以我目前的知识,QT内部是不存在挂起线程的方法了。只能每次运行的时候判断下是否允许运行了。

boost的锁倒是可以,但是它的实际运行状况只能用 “诡异”来形容……


具体解决方案仍待继续实践啊!


于2016-06-18添加:

挂起线程应该使用条件变量。wait挂起,notify唤醒。标准库,Qt,操作系统都提供了相关的函数,具体使用方法网上一搜一大把。

需要注意的是,条件变量是为线程同步设计的工具,目的是多线程的情况下保证资源的有序访问。

所以它需要跟锁一起使用。如果你看到了传锁作为参数,不要觉得奇怪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值