2024年4月28日发(作者:)

qt4的 qthread sleep机理 条件变量

在qt4的《从qthread到sleep》一文中我们了解了线程的基本

使用,但是有一大部分的内容当时说要放到这片文章里讨论,那就是

线程的同步问题。关于这个问题,在《从进程到线程》中有一个比喻,

有必要重新放在下面温习下:

用一个比喻来总结下条件变量:

1.一个进程就好比一个房子里有一个人;

2.clone创建线程就相当于在这个房子里添加一个人;

3.fork创建进程就相当于再造一个房子,然后在新房子里添加

一个人。

有了上面的比喻后,我们就清楚很多了:

1.线程之间有很多资源可以共享:比如厨房资源、洗手间资源、

热水器资源等;

2.而对于进程来说,一个概念就是进程间通信(你要和另外一

个房子里的人通信要比一个房子里的两个人之间通信复杂);

3.线程之间因为共享内存,所以通过一个全局的变量就可以交

换数据了;

4.但与此同时,对于线程来说,又有新的概念产生了:

① 一个人使用洗手间的时候,得锁上以防止另一个人对洗手间

的访问;

② 一个人(或几个人)睡觉的时候,另外一个人可以按照之前

约定的方式来叫醒他;

③ 热水器的电源要一直开着,直到想洗澡的人数减为0;