线程在C中等待

时间:2015-02-04 13:13:45

标签: c parallel-processing pthreads

我正在使用pthreads在C中实现并行代码。现在我正在尝试使用互斥锁对特定数据结构进行混合操作。比方说,我有一个5,00,000的数据集,我已经使用了4个线程插入到结构中,4个线程并行地删除(整个数据)。我需要4个删除线程才能在插入的4个线程完成至少30-50%的数据插入后才开始。是否有可能延迟线程? pthreads的条件格式可以用于相同的吗?如果提供相同的任何资源将是有用的。

示例代码:

thds = (pthread_t *)malloc((nthdsIns + nthdsDel - 1) * sizeof(pthread_t));
thdArg = (tArg *)malloc((nthdsIns + nthdsDel - 1) * sizeof(tArg));

for(i = 0; i < nthdsIns; i++){
    thdArg[i].num = numsIns; // array of elements to be inserted
    thdArg[i].start = i * iterIns; //starting index
    if(nthdsIns == 1)
        thdArg[i].end = nValIns-1; //ending index
    else
        thdArg[i].end = (i+1) * iterIns - 1;
}

for(k=0; k < nthdsIns; k++)
    pthread_create(&thds[k], NULL, pThdIns, &thdArg[k]);//spawning threads

temp = k;

/*Need to put some condition here inorder to allow the insertion threads to complete half of the insertion part*/



for(j = i, k = 0; k < nthdsDel; j++, k++){
    thdArg[j].num = numsDel;//array for deletion
    thdArg[j].start = k * iterIns;
    thdArg[j].end = (k+1) * iterIns - 1;
}

for(k = 0, j = temp; k < nthdsDel; k++, j++)
    pthread_create(&thds[j], NULL, pThdDel, &thdArg[j]);//spawning threads

for(i=0; i < (nthdsIns + nthdsDel); i++)
    pthread_join(thds[i], NULL);//joining threads

1 个答案:

答案 0 :(得分:1)

您应该使用condition variables(condvar),mutices等来同步您的主题。

delete()
{
  wait_on_cond();
  take_lock();
  actual_insert();
  release_loc();
}

insert()
{
  take_lock();
  actual_insert()
  release_lock();
  signal_condition();
}

这是关于如何使用条件的基本思路。您需要检查您计划使用的库的实际文档。