Есть ли хороший семафор для XNA на XBox 360? - PullRequest
3 голосов
/ 07 декабря 2009

Я ищу быструю и эффективную реализацию семафора для .NET Compact Framework. Здесь был еще один Вопрос о SO ( Семафоры в .NET compact framework ), в котором было предложено использовать P / Invoke, но это невозможно в XNA Framework, работающем на XBox 360.

Я могу предложить две собственные реализации, но я считаю, что они неоптимальны.

Семафор с использованием AutoResetEvent (вставка)
Одна из возможных реализаций управляемого семафора - использование AutoResetEvent.

В этом случае, когда работа становится доступной, AutoResetEvent переводит только один поток в состояние «работоспособно». Когда планировщик потока ОС запускает поток, он снова открывает AutoResetEvent, переводя следующий поток в состояние «runnable». Таким образом, потоки будут запускаться последовательно, и только после того, как их предшественник действительно приступит к выполнению.

Семафор с использованием ManualResetEvent (pastebin)
Другой возможной реализацией будет использование ManualResetEvent.

В этом случае, когда работа становится доступной, ManualResetEvent переведет все потоки в состояние «работоспособно». Все потоки, которые запускает планировщик потока ОС, конкурируют за рабочие элементы, пока первый поток, который заканчивается без работы, снова сбрасывает ManualResetEvent. Другими словами, возможно, все потоки будут разбужены на короткое время, даже если не все потоки требуются.

Кто-нибудь знает о лучшей реализации или может предложить предложения по улучшению моей?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2009

Редактировать: не важно, просто прочитайте другой поток, на который вы ссылались: Не включен ли сам класс семафора в CF XBox? http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx

В противном случае, вот реализация, которую я нашел в codeproject. Сам не использовал, но, возможно, это может служить справкой: -)
http://www.codeproject.com/KB/threads/inprocsemaphore.aspx

0 голосов
/ 24 февраля 2010

OpenNetCF имеет класс семафоров для компактной структуры. Есть ли причина, по которой вы не можете использовать библиотеки OpenNetCF на Xbox?

...