Является ли CreateThread () «точкой синхронизации»? - PullRequest
2 голосов
/ 20 сентября 2019

Я пишу некоторый код Win32, например:

myctx.somedata = 42;
CreateThread(blablabla, &my_thread_entry_func, &myctx);

Можно ли ожидать, что вновь созданный поток увидит эффект myctx.somedata = 42, как только он появится?И что важно, как я мог бы сам разобраться в этом?

И пока мы на нем, как обстоят дела с pthreads в Linux?

1 Ответ

2 голосов
/ 20 сентября 2019

внутренне с потоком будет связана некоторая структура, в которой хранятся данные потока.это для любой ОС.

Что делает CreateThread (или любая аналоговая функция)?сначала он создает и инициализирует эту структуру, а затем помещает ее в некоторую внутреннюю базу данных планировщика.

затем планировщик (на произвольном ядре) извлекает структуру потока из этой базы данных и начинает выполнять ее код.

очевидно, чемпосле того, как планировщик вытолкнет данные потока из базы данных - он должен просмотреть все данные, записанные в данные потока перед отправкой.это означает, что push должен иметь как минимум семантики релиза, так и поп-музыку.

, поскольку myctx.somedata = 42; происходит до того, как данные потока будут созданы, они, конечно, также будут видны в точке, где данные потока будут найдены планировщиком.Ваш пользовательский код потока будет выполнен после того, как планировщик вытолкнет ваши данные потока.так что это, конечно, будет тоже myctx.somedata = 42;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...