在pthread_create
我可以指定一条消息,然后在运行时我可能会收到需要传递给线程进行打印的新消息。
一种方法可能是创建一个全局向量,并继续向其添加消息。该线程将获取该向量并扫描它以获取新消息 但是这样就必须为n个线程创建n个向量! 或者一个具有线程,消息和打印状态的结构。
有哪些可行的实用方法?
以下设计是否正常或需要一些改进?
以下代码将用main()调用的普通函数编写。
检查线程(负责抓取该消息)是否已经存在。
当线程完成读取队列中的所有消息时,让它与(pthread_cond_wait())一起休眠。
答案 0 :(得分:4)
如果你有一个全局队列,我会使用一个链表,而不是一个向量,并用互斥锁将其锁定,否则你将获得竞争条件。
答案 1 :(得分:2)
Google'pthreads生产者消费者队列'。您不需要扫描新条目 - 生产者/ s信号通知新条目可用的消费者线程。
答案 2 :(得分:0)
将全局向量作为pthread特定数据,因此每个线程都拥有自己的数据副本。您不需要创建N个变量。