これが私がやりたいことです:番号を生成してそれらをキューに入れるメインスレッドがあり、それはキュー内の番号を消費する子スレッドを起動します。
メインスレッドは、キューのサイズが10を超えると数値の生成を停止し、キューのサイズが5未満になると数値の生成を再開する必要があります。
queue<int> qu;
void *num_consumer(void *arg)
{
while(1) {
//lock qu
int num = qu.pop();
//unlock qu
do_something_with(num);
}
}
int main()
{
pthread_create(&tid, NULL, num_consumer, NULL);
while(1) {
int num;
produce(&num);
//lock qu
queue.push(num);
//unlock qu
if(qu.size() >= 10) {
//how to block and how to resume the main thread?
}
}
}
私semaphore
はその仕事をするために使うかもしれませんが、他のアイデアはありますか?