2014-01-11 3 views
0

Моя проблема: A, B - семафоры.Как отменить SEM_UNDO последней операции на семафоре?

процесс петли:

  1. ожидает> = 1, уменьшает значение
  2. делает некоторые вычисления
  3. приращения B.
  4. обратно до 1.

Цель: После окончания процесса мне нужно, чтобы декременты A были равны приращениям B.

Итак, я понял, что добавлю флаг SEM_UNDO в 1. но он отменяет каждый DEcrement, когда-либо сделанный A этим процессом. Как отменить/отменить SEM_UNDO от 1. когда процесс достигает 4.?

+0

Если 'A' и' B' не совпадают в конце, у вас больше проблем, чем у SEM_UNDO. Похоже, вы не поняли, какую часть семафоров играют в вещах. Как вы показываете нам какой-то код, и мы можем помочь вам разобраться, как избежать этих искажений. – cHao

ответ

0

ОК, я был просветлен, когда думал о проблеме как «отменяю» SEM_UNDO, а не «отзывал» ее.

после вызова semop() с операцией + х с SEM_UNDO, вы можете позже отменить эту SEM_UNDO по телефону semop() снова с двумя операциями:

  1. -х с SEM_UNDO
  2. + х без SEM_UNDO
+4

Признаюсь, я не могу следить за тем, что вы делаете, но я предполагаю, что вы нарисовали себя в углу и теперь думаете, что разрезать отверстие в стене, чтобы выйти из другой комнаты, является решением. – Duck

+0

@ Duck была ошибка в части вопроса, где я описывал то, что я пытался сделать, - просто исправил ее. Извините всех. – Maq

+0

Это неверно. Способ гарантировать, что ваш процесс не будет выдавать отмену, когда он завершается, состоит в том, чтобы выполнять операции + и - * с помощью * SEM_UNDO. – craig65535

Смежные вопросы