Моя домашняя работа заключалась в том, чтобы выполнять ожидания и сигналы на массиве семафоров в алмазном узоре.Семафоры как алмаз
Вот картина:
08
06 07
03 04 05
01 02
00
Thread #08 cannot join the diamond until threads #06 and #07 are both in position.
Thread #07 cannot join until threads #04 and #05 are both in position.
Thread #06 cannot join until threads #03 and #04 are both in position. and so on...
До сих пор мое мышление привело к следующему алгоритму: уродливой
if (me==0) {
wait_sem (tCount[1]) ;
wait_sem (tCount[2]) ;
signal_sem (tCount[0]) ;
}
if (me==1) {
wait_sem (tCount[3]) ;
wait_sem (tCount[4]) ;
}
if (me==2) {
wait_sem (tCount[4]) ;
wait_sem (tCount[5]) ;
}
if (me==3) {
wait_sem (tCount[6]) ;
}
if (me==4) {
wait_sem (tCount[6]) ;
wait_sem (tCount[7]) ;
}
if (me==5) {
wait_sem (tCount[7]) ;
}
if (me==6) {
wait_sem (tCount[8]) ;
}
if (me==7) {
wait_sem (tCount[8]) ;
}
Есть ли уборщик способ сделать это? Я слышал switch
, но я никогда не использовал его раньше, поэтому, если кто-нибудь предложит его, пожалуйста, предоставьте мне объяснение и/или пример. Большое спасибо за все входные данные.
Быстро вопрос, включил бы я этот код в функцию, связанную с алгоритмом, или должен ли я поместить часть ее во всемирный доступ? – Junikin
Трудно дать быстрый ответ на это. – paddy
Хорошо, я понимаю. Я немного поиграю с этим. Спасибо за тонну – Junikin