如何使用POSIX线程使用线程标识符调用线程函数?

时间:2015-05-07 05:33:26

标签: c linux multithreading

我是posix线程的新手。我正在开发一个项目,其中一个组件在初始化时创建所有posix线程。如果有任何线程空闲,则另一个组件必须请求池管理器。如果空闲,池管理器返回线程处理程序,另一个组件将其数据切换到该线程处理程序。我有两个问题:

  1. 初始化时,创建线程意味着调用pthread_create()函数。因此,线程执行pthread_create()中提到的例程并退出。池管理器如何识别免费线程?

  2. 如果线程在其例程中等待其数据,那么其他组件如何使用线程处理程序将其数据切换到线程。

1 个答案:

答案 0 :(得分:0)

通常使用互斥锁和条件变量以及一些共享内存结构。 例如,您将创建一个数组,一个互斥锁和一个条件变量。然后你在池中的工作线程将:

  1. 锁定互斥锁
  2. 等待条件变量(mutex会自动释放)
  3. 一旦等待返回,就意味着cond var已经发出信号(并且互斥锁再次被锁定)
  4. 从数组
  5. 中删除该项工作
  6. 解锁互斥锁(或返回(2)
  7. 在想要将作业提交到池的客户端线程中:

    1. 锁定互斥锁
    2. 将工作添加到数组
    3. 发出条件变量信号
    4. 有很多关于此的教程,例如: https://computing.llnl.gov/tutorials/pthreads/#ConVarCreation