C线程同步
我有一个问题,使用多个线程和同步他们在一个适当的顺序。问题的状态如下:我有44个线程从1-44。我可以有最多4个线程,可以进入关键领域的时刻。只有当关键区域中有4条螺纹(包括它们)时,12号螺纹才必须关闭。问题如下:有时线程关闭得很好,有时关闭得不好。我不知道它什么时候会来,它可能是最后一个,所以我强迫它成为第一个进入关键区域的。这是同步44个线程的代码示例:C线程同步,c,linux,multithreading,C,Linux,Multithreading,我有一个问题,使用多个线程和同步他们在一个适当的顺序。问题的状态如下:我有44个线程从1-44。我可以有最多4个线程,可以进入关键领域的时刻。只有当关键区域中有4条螺纹(包括它们)时,12号螺纹才必须关闭。问题如下:有时线程关闭得很好,有时关闭得不好。我不知道它什么时候会来,它可能是最后一个,所以我强迫它成为第一个进入关键区域的。这是同步44个线程的代码示例: void *thread_sync_P7(void *arg){ int *val = (int*)arg; if(*
void *thread_sync_P7(void *arg){
int *val = (int*)arg;
if(*val != 12) {
sem_wait(&semP7_2);
}
sem_wait(&semP7_1);
info(BEGIN, 7, *val);
if(*val == 12) {
sem = 0;
for(int i = 0;i < threadP7 - 1;i++){
sem_post(&semP7_2);
}
}
info(END, 7, *val);
sem_post(&semP7_1);
return NULL;
}
如您所见,P7T12是id为12的线程。它后面是T2和T3,但是它关闭了,并且只显示了3个线程。如何更好地同步它们?有几种方法可以实现这一点:
一个线程“关闭”意味着什么?要达到函数的结尾,请像我在那里展示的那样显示日志并返回NULL。如果您尝试按顺序执行多个线程,那么编程多个线程有什么意义?
[T] BEGIN P7 T12 pid=24850 ppid=24848 tid=825038592
[T] END P4 T3 pid=24848 ppid=24846 tid=900572928
[T] BEGIN P7 T2 pid=24850 ppid=24848 tid=908965632
[T] END P4 T1 pid=24848 ppid=24846 tid=917358336
[T] BEGIN P7 T3 pid=24850 ppid=24848 tid=900572928
[T] END P5 T0 pid=24851 ppid=24847 tid=925882176
[T] END P7 T12 pid=24850 ppid=24848 tid=825038592
[T] BEGIN P7 T4 pid=24850 ppid=24848 tid=892180224