Пропустить до конца времени кванты - PullRequest
0 голосов
/ 25 июня 2010

Можно ли перейти к концу выделенного времени процесса?У меня есть программа, которая работает параллельно над частью общей памяти, и затем все процессы должны ждать завершения других и синхронизации до следующего шага.Каждый процесс будет делать максимум на одну итерацию больше, чем любой другой, поэтому любые временные различия минимальны.

Микросон почти работает, но я уверен, что даже usleep (1) займет больше времени, чем янапример (на данный момент я могу выполнить 5000 раз примерно за 1,5 секунды, так что это добавит к тесту около 20 мс).

Некоторое занятое ожидание кажется плохой идеей, хотя на этом я мог бы закончитьпродолжай.

То, что я действительно хотел бы, это что-то вроде

while(*everyoneDone != 0) {
    //give up rest of this time-quantum
}

Это не должно быть в реальном времени, это просто нужно быть быстрым.Любые идеи?

Обратите внимание, что это будет работать на многопроцессорной машине, потому что, если будет работать только одно ядро, существующая однопоточная версия будет работать лучше.

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Не делайте этого, активное ожидание почти всегда является плохой идеей в контексте приложения. Используйте pthread_barrier_t, это именно тот инструмент, который предусмотрен для вашей цели.

1 голос
/ 25 июня 2010

Вы не указываете, с какой ОС работаете, но если это POSIX, тогда sched_yield() может быть тем, что вы ищете.

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

...