В C ++, как вы объявляете двоичный семафор? - PullRequest
0 голосов
/ 08 апреля 2011

Я пытаюсь объявить двоичный семафор в C ++.
Есть ли способ сделать это с помощью Semaphore X;?
Какой заголовок нужно включить?

Извините ... Я использую Unix G ++

Ответы [ 3 ]

4 голосов
/ 08 апреля 2011

Язык C ++ и стандартные библиотеки не имеют понятия семафоров или даже потоков.Ответ полностью зависит от того, на какой платформе вы работаете;например, системные API-интерфейсы Windows и Linux поддерживают семафоры.

2 голосов
/ 08 апреля 2011

Поскольку C ++ 2003 будет выпущен некоторое время, взгляните на Boost.Thread. Вы не найдете там семафора, но это, вероятно, слишком низкий уровень для того, что вы пытаетесь сделать в любом случае.

1 голос
/ 08 апреля 2011

Если используемый компилятор реализует (по крайней мере, многопоточную часть) стандартной библиотеки C ++ 11, вы бы использовали std::mutex X; или, возможно, std::recursive_mutex X;, std::timed_mutex X; или std::recursive_timed_mutex X;, в зависимости ото том, какие возможности вы хотите (без указания, указывающего на обратное, я думаю, вы хотите std::mutex).

В более старой библиотеке вы, вероятно, захотите использовать эквивалент pthreads.Если вам нужна поддержка Windows (которая изначально не включает pthreads), вы можете использовать пакет pthreads-win32 Энтони Уильямса.У этого есть два положительных момента: во-первых, он является родным для Posix и Posix-подобных систем (например, Linux), и, во-вторых, хотя он использует несколько разные имена, основная идея почти такая же, как в стандартной библиотеке C ++ 11, этодолжно быть довольно легко изменить это, когда ваш компилятор поддерживает это.

...