小编use*_*552的帖子

唤醒单个线程而不是在 pthreads 中忙等待

我不确定标题是否反映了我在这里问的内容,但如果没有很长的标题,我能做到的最好。我正在尝试worker threadpthreads. 我想从main函数中生成一组线程,然后main线程将作业委托给工作线程并等待所有线程完成,然后再为它们分配下一个作业(实际上,要求是将线程安排在一个块中,很像 CUDA编程模型,但在 CPU 上。虽然它与当前问题无关)。该job数组用于向每个线程指示作业类型。目前,我已经使用信号量实现了这一点,这会强制执行繁忙的等待。我正在寻找方法使线程仅在需要时才进入睡眠和唤醒状态,而不是连续轮询。

每个线程执行的函数

volatile int jobs[MAX_THREADS]; // global job indicator array
sem_t semaphore;                // semaphore to indicate completion
thread_execute(void *args)
{
  tid = get_id(args);
  while(jobs[tid] != -1)
  {
    if(jobs[tid] == 0) continue; // no job
    if(jobs[tid] == JOBS_1)
    {
      jobs1();
      jobs[tid] = 0; // go back to idle state
      sem_post(&semapahore);
    }
    if(jobs[tid] == JOBS_2)
    {
      jobs2();
      jobs[tid] = 0; // go back to idle state
      sem_post(&semapahore); …
Run Code Online (Sandbox Code Playgroud)

c multithreading semaphore pthreads

4
推荐指数
1
解决办法
7650
查看次数

标签 统计

c ×1

multithreading ×1

pthreads ×1

semaphore ×1