Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Semaphore error, Adding the given count to the semaphore  
V
    Опции темы
cupper
Дата 18.11.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



есть метод a() and b()

нужно синхронизовать что бы они выполнялись в такой послдовательности
a()
b()
a()
b()

каждый a() и b() вызывается из разных потоков. b физически может быть вызван только после a().

Создаю глобальных семафор (не обращайте на непонятные закорючки это все cli, тобишь С# тока из С++)

static gcroot<System::Threading::Semaphore^> GLOBAL_MTX = gcnew System::Threading::Semaphore(1, 1);
a()
{
try{GLOBAL_MTX ->WaitOne()}
catch(){GLOBAL_MTX ->release()}
}

b()
{
GLOBAL_MTX ->release()
}
        

работает это так:
вызываеться метод a() из двух потоков, кто первый дошол до семафора, тот его залочил и продолжил работать дальше, другой курит. Спутя некоторое время вызывается b()... и вот тут я получаю 
Код

SemaphoreFullException: Adding the given count to the semaphore would cause it to exceed its maximum count.
    

почему ??? Как будто у меня не разу не вызывался WaitOne(), хотя он как один раз и вызывался, тем кто первый до него дошел.
PM MAIL   Вверх
cupper
Дата 18.11.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



GLOBAL_MTX  создается в хедере не в классе но в неймспейсе.
Этот хедер подключается двумя cpp файлами. В первой функция a() во втором b()

вы работе с GLOBAL_MTX  исключительно в функции a() все работает корректно. получается у меня GLOBAL_MTX  создается дважды ? О_О
PM MAIL   Вверх
cupper
Дата 18.11.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



блин, в этом и была ошибка :( не стоило мне определять глобальную переменную в h файле ((
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.5093 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.