关于QT5.5的QSystemSemaphore,英文的帮助文档。
例子
QSystemSemaphore sem("market", 3, QSystemSemaphore::Create); // resources available == 3
sem.acquire(); // resources available == 2
sem.acquire(); // resources available == 1
sem.acquire(); // resources available == 0
sem.release(); // resources available == 1
sem.release(2); // resources available == 3
为避免碰到特殊情况,在使用的时候,
1.可以使用Open模式创建,但resource count要一直是个固定值,最好是1。
2.如果resource count不是1,就需要注意进程意外挂掉对resource计数的影响。
注意事项来源:
针对Linux的特殊地方是:
1.如果进程意外挂掉,此时QSystemSemaphore创建的信号量可能会存活下来。方法:以对应key访问可以访问到。
2.如果QSystemSemaphore创建的信号量存活了下来,而此时如果使用
QSystemSemaphore::Open
方法去重新创建信号量,例如
QSystemSemaphore sem("market",1, QSystemSemaphore::Open);
这个值1不会生效
此时由于信号量是存活的,所以这里资源数量仍然是3,而不是1
3.如果进程意外挂掉,这个进程里的系统信号量会牵连其他进程。导致该系统信号量资源数量被翻转回原始值。如果原始值是3,那么还是3.
QT小意外。如果原生QT都这样,怕wx这样次生的更会有瑕饬。
Linux下QT中执行shell命令:http://www.linuxdiyf.com/linux/14879.html
ubuntu 15.10 qt 5命令行相关注意事项:http://www.linuxdiyf.com/linux/14399.html
Qt5.5和PyQt5.5在UbuntuKylin15.04的快速安装脚本:http://www.linuxdiyf.com/linux/13046.html
linux下Qt环境的搭建:http://www.linuxdiyf.com/linux/13770.html
Ubuntu15下Qt+libusb开发:http://www.linuxdiyf.com/linux/12686.html