问使用 posix 条件变量的问题
先贴一段代码:
1> pthread_mutex_t count_lock;
2> pthread_cond_t count_nonzero;
3> unsigned count;
4>
5> decrement_count()
6> {
7> pthread_mutex_lock(&count_lock);
8> while (count == 0)
9> pthread_cond_wait(&count_nonzero, &count_lock);
10> count = count - 1;
11> pthread_mutex_unlock(&count_lock);
12> }
问题:1.当线程阻塞在cond_wait后,如果这时收到了cond_signal,它的状态即变为就绪态,等到CPU资源后就可以向下执行,并不是接收到signal后立即转为执行。其它线程也有可能先于它被唤醒,对count进行操作。这样理解对吗?
2.关于阻塞在cond_wait的线程,接收到cond_signal并且分到CPU后的执行顺序:
它是返回到第7行加锁,然后再执行第8行判断count是否为零呢,还是在cond_wait中自动完成加锁及判断条件?我试着在第8行和第9行之间加了一条print语句,线程被唤醒后并没有再次执行这条语句,说明再次锁mutex和条件判断是cond_wait自动完成的,那他是怎么知道判断条件的呢?