Синхронизация. Что-то я туплю...

Тема в разделе "WASM.WIN32", создана пользователем _Juicy, 10 авг 2011.

  1. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Squash
    Ну хоть сейчас уже понятно?
     
  2. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Что делать с семафором? Нет.
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Squash
    Забейте на симофор, а то вообще не получится что то вам объяснить, юзайте код из поста 18, только доделаете его, а то я на "коленке" писал.(Interlocked, Создания и разрушения :) )
     
  4. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Слив засчитан :Ъ
     
  5. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Squash
    А вот это и не слив, просто там будет цикл (Как просто с Interlock), но зато это штука будет меж процессорная ...
     
  6. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    мой из путей посложнее
    Код (Text):
    1. int cnt = 0;
    2.  
    3. int crt_trd_wrp(...){
    4.  while(1){
    5.   _asm {
    6.     mov eax, -1
    7.     xchg eax, cnt
    8.     inc eax
    9.     jz W
    10.    
    11.     mov cn , eax
    12.   }
    13.  
    14.   // создаем поток и выходим
    15.  
    16.   W:
    17.   Sleep(0);
    18.  }
    19. }
    20.  
    21.  
    22. int exi_trd_wrp(...){
    23.  while(1){
    24.   _asm {
    25.     mov eax, -1
    26.     xchg eax, cnt
    27.     dec eax
    28.     cmp eax, -2
    29.     jz W
    30.    
    31.     mov cn , eax
    32.   }
    33.  
    34.   // удаляем поток и выходим
    35.  
    36.   W:
    37.   Sleep(0);
    38.  }
    39. }
    40.  
    41.  
    42. void exi_prc_wrp(...){
    43.  while(1){
    44.   _asm {
    45.     mov eax, cnt
    46.     cmp eax, 0
    47.     jnz W
    48.   }
    49.  
    50.   // выходим
    51.  
    52.   W:
    53.   Sleep(0);
    54.  }
    55. }
    хотя разумнее енумеровать перед закрытием и ждать по хэндлам. или еще вначале создавать массив на максимум потоков и забрасывать-удалять оттуда. система же не выдержит любое число потоков? массив на 1000 хэндлов - вполне разумный максимум.
    можно и сложнее чтотo придумать если охота.
     
  7. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    Сталкивался , в несколько другом контексте, по эвенту не исключены ошибки: http://www.wasm.ru/forum/viewtopic.php?id=43187