Есть ли способ гарантировать, что поток был создан до перехода к другим инструкциям (без использования обхода, такого как sleep()
)?wait for thread creation
У меня есть цикл, который выглядит примерно так:
for(i = 0; i < NUM_THREADS; ++i)
{
if(pthread_create(&threads_id_array[i], NULL, ThreadFunction, &args))
{
perror("pthread_create() error");
exit(1);
}
args.base += args.offset;
}
base
Где это указатель на массив. Я хочу убедиться, что поток был создан до продвижения base
, чтобы я мог убедиться, что значение args.base
в потоке содержит правильное значение. В настоящее время это вызывает ошибки.
Является ли 'args.base' установленным нитью? Потому что существует разница между созданным потоком и выполнением до точки установки значения. –
, когда 'pthread_create()' возвращает 0, поток был «создан». Но будет ли это запущено выполнение или ждет, чтобы быть запланированным, это что-то еще. Вы хотите, чтобы 'args.base' обновлялся только в том случае, если созданный завершен или что-то выполнил? Похоже, что «args.base» обращается к потоку небезопасным образом (возможно, к гонке данных). Опубликуйте [MCVE]. –
@ColonelThirtyTwo, 'args.base' задается основным потоком, а не созданным потоком. – HeyJude