我正在使用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
答案 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();
}
这是关于如何使用条件的基本思路。您需要检查您计划使用的库的实际文档。