读书人

迅雷面试题:ABCABC… 求pthread_cond

发布时间: 2012-04-16 16:20:04 作者: rapoo

迅雷面试题:ABCABC… 求pthread_cond_t的解法
题目:
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

详见:http://blog.csdn.net/enjolras/article/details/7456540

求解答:
1、这道题是否适合使用pthread_cond_t?使用sem_t是否更合适。
2、pthread_cond_signal只能唤醒pthread_cond_wait状态下的线程,为什么linux会这么设计?有什么好处?

[解决办法]
1适合
2没有wait的进程不需要唤醒,这样能提高效率
[解决办法]
加个控制标识就可以了,如果是1A打印,设置为2,如果是2B打印,再设置为3,如果是3C打印,再设置为1.
依次类推。
[解决办法]
搞个线程队列,单向的。比如A执行完了之后加到队列尾部,依次执行。
[解决办法]
你的线程里的处理不对.应该这样

C/C++ code
void * thread(thr_id* t){    pthread_mutex_lock(t->mutex); //这个lock相当重要    sem_post(t->sem);    pthread_cond_wait(t->self_cond, t->mutex);    pthread_mutex_unlock(t->mutex);    //真正开始    for(int i = 0; i < 10; ++i)    {        pthread_mutex_lock(t->mutex);        std::cout<<t->id<<std::flush;        pthread_cond_signal(t->next_cond);        if(i < 9) //输出最后一遍的时候,不用再wait而是退出线程            pthread_cond_wait(t->self_cond, t->mutex);        pthread_mutex_unlock(t->mutex);    }}
[解决办法]
探讨

不是不能,是我不会用。。

如何确认线程a b c,都已经是在等待了,再对线程A pthread_cond_signal?

读书人网 >C++

热点推荐