我想用智能方式使用pthreads在C++中同步線程。如何使用pthreads以智能方式共享變量到線程?
我有一個全局變量:
int Resources = 0;
我有兩個線程函數:
void *incResources(void *arg)
{
while(1)
{
pthread_mutex_lock (&resourcesMutex);
Resources += 2;
pthread_mutex_unlock (&resourcesMutex);
}
pthread_exit((void*) 0);
}
void *consumeResources(void *arg)
{
while(1)
{
pthread_mutex_lock (&resourcesMutex);
Resources--;
pthread_mutex_unlock (&resourcesMutex);
}
pthread_exit((void*) 0);
}
而且在主要功能我intialize 2個消耗線程和一個遞增線程:
pthread_mutex_init(&resourcesMutex, NULL);
pthread_create(&callThd[0], &attr, incResources, (void *)i);
pthread_create(&callThd[1], &attr, consumeResources, (void *)i);
pthread_create(&callThd[2], &attr, consumeResources, (void *)i);
我覺得這樣效率不高,可以做得更好。你能提供一些想法嗎?我試圖用等,但我沒有得到它:/ 謝謝!
你真正的問題是什麼?我相信你不只是遞增和遞減一個變量。 –
線程和效率更多地取決於消費者與生產者之間的問題/工作類型,而不僅僅是數字。這可能是一個比例是合理的。我們沒有足夠的信息來提供明智的見解。 EX:如果你所做的只是遞增和遞減整數,你會看到1個消費者太多。 :) – ChrisCM
我寧願使用一個類,並通過使用一些全局引用將實例傳遞給線程函數。 –