Можно ли избежать гонок будильника-ожидания, используя только POSIX семафоры? Это доброкачественное?

голоса
0

Я хотел бы использовать POSIX семафоры для управления атомными получить и поместить из файла, представляющего очередь. Я хочу, чтобы гибкость иметь что-то с именем в файловой системе, так что совершенно несвязанные процессы могут совместно использовать очередь. Я думаю, что этот план исключает Pthreads. Названные семафоры POSIX отлично подходит для положить что-то в файловой системе, что любой процесс можно увидеть, но я не могу найти стандартный CondWait примитивно:

... decide we have to wait ....
CondWait(sem, cond);

Когда CondWait вызываются процессом его атомарные сообщения в гипюр и ждет на конде. Когда некоторые другие должности технологов Cond, процесс ожидания просыпается только тогда, когда он может атомарно декремент семафор, а также. Альтернатива

... decide we have to wait ....
sem_post(sem);
sem_wait(cond);
sem_wait(sem);

подлежит условия гонки, в котором некоторые другие сигналы процесса Cond непосредственно перед этим процесс ожидает от него.

Я вряд ли когда-либо делать какие-либо параллельного программирования, так что я думал, я хотел бы спросить SO: если я использую стандартный подсчет POSIX семафор для условной переменной, возможно, что эта гонка является доброкачественной?

Только в случае, если кто-то хочет более широкий контекст, я строй получить и поместить операции для атомной очереди, которая может быть вызвана из сценариев оболочки.

Задан 10/12/2008 в 04:48
источник пользователем
На других языках...                            


4 ответов

голоса
2

Поскольку нет никаких других ответов я буду следить за тем, что я узнал:

  • Pthreads не будет работать с моим приложением, потому что у меня есть процессы без общего предка, который нужен разделить атомную очередь.
  • Posix семафоры являются предметом гонки будильника-ожидания, а потому , что в отличие от классического переменного условия они рассчитывают семафоры , гонка доброкачественная. У меня нет доказательств этого утверждения , но у меня была система работает в течение двух дней , и теперь работает хорошо. (Совершенно бессмысленно я знаю, но , по крайней мере , это означало , что я получил работу.)
  • Названные Posix семафоры трудно мусор, собрать из файловой системы .

Подводя итог, именованные семафоры Posix оказались , чтобы быть хорошей основой для реализации атомной абстракции очереди быть распределено между несвязанными процессами .

Я хотел бы иметь доказательство или проверенную модель SPIN, но моя необходимость применения ограничена, маловероятно, что я буду писать один. Я надеюсь, что это поможет кому-то еще, кто может захотеть использовать Posix семафоры.

Ответил 13/12/2008 в 06:13
источник пользователем

голоса
0

Я знаю , этот вопрос старый, но очевидное решение было бы просто использовать процесс с разделением мьютексы и переменные условия , расположенные в файле вы можете mmap.

Ответил 04/08/2011 в 07:44
источник пользователем

голоса
0

В соответствии с POSIX стандартом, множество семафоров подпрограмм:

  • sem_close ()
  • sem_destroy ()
  • sem_getvalue ()
  • sem_init ()
  • sem_open ()
  • sem_post ()
  • sem_timedwait ()
  • sem_trywait ()
  • sem_unlink ()
  • sem_wait ()

sem_trywait()И sem_timedwait()функции может быть то , что вы ищете.

Ответил 20/12/2008 в 00:22
источник пользователем

голоса
-1

Вы ищете: pthread_cond_wait, pthread_cond_signal, я думаю.
Это если вы используете Posix нити, то методы PTHREAD будет поставлять функциональность CondWait и сигнала.
Посмотрите здесь для исходного кода на многопроцессорной Pthreads через разделяемую память.
http://linux.die.net/man/3/pthread_mutexattr_init
Это для Linux, но эти документы POSIX. Они похожи на Solaris, но вы хотите , чтобы просмотреть справочные страницы по вашей операционной системе.

Ответил 10/12/2008 в 08:48
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more