LINUX.ORG.RU

История изменений

Исправление mky, (текущая версия) :

Как там может быть выведен 0, если printf закомментированы, а в array[0] ещё до printf в одном случае становится <0, а в другом >0.

Вы напишите как у вас семафоры должны «взаимно исключают эти 2 процесса», чтобы один из процессов ждал, пока другой не выполнит весь for, или чтобы они в for поочерёдно (как получится) крутили счётчик туда-обратно?

Семафон нужно сначала установить в заданное число (ещё до fork) с помощью semctl(), а потом программа должна делать с семафором (-1), это LOCK если semop() успешно, а после освобождать операцией (+1). Это если нужно блокироваться при ожидании. Или делать две опрации на одном семафоре в одном semop() — 0 ждать и +1 для LOCK, а потом -1 для UNLOCK.

Исходная версия mky, :

Как там может быть выведен 0, если printf закомментированы, а в array[0] ещё до printf в одном случае становится <0, а в другом >0.

Вы напишите как у вас семафоры должны «взаимно исключают эти 2 процесса», чтобы один из процессов ждал, пока другой не выполнит весь for, или чтобы они в for поочерёдно (как получится) крутили счётчик туда-обратно?

Семафон нужно сначала установить в заданное число (ещё до fork) с помощью semctl(), а потом программа должна делать с семафором (-1), это LOCK если semop() успешно, а после освобождать операцией (+1). Это если нужно блокироваться при ожидании. Если блокироваться не нужно, то можно вместо IPC_NOWAIT пытаться делать две опрации на одном семафоре — 0 и +1 для LOCK и -1 для UNLOCK.