如何在运行时将新消息传递给线程函数?

时间:2012-01-11 10:19:03

标签: linux multithreading pthreads

pthread_create我可以指定一条消息,然后在运行时我可能会收到需要传递给线程进行打印的新消息。

一种方法可能是创建一个全局向量,并继续向其添加消息。该线程将获取该向量并扫描它以获取新消息 但是这样就必须为n个线程创建n个向量! 或者一个具有线程,消息和打印状态的结构。

有哪些可行的实用方法?

编辑1:

以下设计是否正常或需要一些改进?

以下代码将用main()调用的普通函数编写。

  • 检查线程(负责抓取该消息)是否已经存在。

    • 如果是,请在该线程的队列中推送消息,使用(pthread_cond_signal())唤醒该线程。
    • 如果不是,请创建线程,创建其队列,在该队列中推送消息。
  • 当线程完成读取队列中的所有消息时,让它与(pthread_cond_wait())一起休眠。

3 个答案:

答案 0 :(得分:4)

如果你有一个全局队列,我会使用一个链表,而不是一个向量,并用互斥锁将其锁定,否则你将获得竞争条件。

答案 1 :(得分:2)

Google'pthreads生产者消费者队列'。您不需要扫描新条目 - 生产者/ s信号通知新条目可用的消费者线程。

答案 2 :(得分:0)

将全局向量作为pthread特定数据,因此每个线程都拥有自己的数据副本。您不需要创建N个变量。