我想知道,如何使用C语言中的信号量来阻止同一个实例的多个线程。我已经将线程定义为收集数据的东西,我想要运行3个线程。线程完成后,它应该等到它被释放并允许再次运行或终止。默认情况下,只有在所有3个线程都准备就绪时才应该这样做。为了模拟不同的结束时间,我将随机时间从1到4秒的睡眠时间传递出去。
void* collectingElf(void* arg)
{
printf("\nCollecting!\n");
sleep((rand() % (upper + lower + 1)) + lower);
}
我尝试了不同的想法 - 第一个想法是初始化值为2的信号量,并在线程完成时调用wait,但是,这只会阻塞调用0的最后一个线程;如果我为每个线程创建一个信号量,我该如何实现呢?
一些背景:我必须这样做以显示对信号量的理解,虽然这里没有共享变量,但我必须使用信号量,并且我无法弄清楚如何在它们完成后阻止它们。