Что такое gcc в linux, эквивалент критических разделов Microsoft?

Компиляторы Microsoft Visual C ++ имеют объекты EnterCriticalSection и ExitCriticalSection для синхронизации между потоками.

Что такое эквивалент GCC?

Я вижу ссылки на __ sync_synchronize вместе с __ scoped_lock

На самом деле я вижу упоминания о ряде атомарных __ sync функций вместе с рядом __ атомарных .

На самом деле я использовал __ sync_fetch_and_add для моего атомарного приращения Следует ли мне использовать вместо __ atomic_add_dispatch ?
В чем разница?

​​Какие из них мне следует использовать? Есть ли в C ++ конструкции, которые я могу использовать как в последней версии GCC, так и в Visual C ++ 2010, которые доступны, поскольку я собираюсь писать кросс-платформенный код.

Я вижу, что у boost есть некоторые функции, но по разным причинам мне не разрешено использовать boost под окнами.

9
задан Matt 23 May 2014 в 00:03
поделиться

2 ответа

В Linux (и других Unixen) вам нужно использовать PThreads или Posix Threads. В Windows нет эквивалента «Критическим разделам»; вместо этого используйте мьютекс.

РЕДАКТИРОВАТЬ: См. Первый комментарий ниже - очевидно, что мьютексы Posix аналогичны критическим разделам Win32 в том смысле, что они привязаны к одному процессу.

19
ответ дан 4 December 2019 в 07:13
поделиться

EnterCriticalSection, а остальные API - это Win32 API. Что касается кроссплатформенных API синхронизации, я не думаю, что они существуют (поскольку вы упомянули, что не можете использовать boost). Кроме того, вы упомянули о кросс-платформенности, означает ли это также различные архитектуры (для части gcc, то есть). Я видел одну большую реализацию, где был предоставлен общий набор API, которые условно компилировались, чтобы иметь родные API (например, fetch_and_add на AIX) или использовали pthreads для Win32 API. Однажды я пытался использовать posix threads на win32, но столкнулся с кучей проблем (но это была очень старая версия). Теперь YMMV.

2
ответ дан 4 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: