Как инициализировать правильно висячий замок (mutex)?

Я новый в конкурирующем программировании и практикую с процессами и трэдами, пока осуществляю задания типа пряду с программными средствами POSIX:

pthread_t
pthread_create();
pthread_init();
pthread_mutex_t

До сих пор только у меня есть сомнение: как я инициализирую ИЗ-ЗА DEFAULT висячий замок (mutex) как блокировано, НЕ ИСПОЛЬЗУЯ ИНСТРУКЦИИ pthread_mutex_lock(); немного как этот псевдокод:

разделенные переменные:

int x;

висячие замки:

C1=1 //cerrado

tareaA(){
     x=rand()%5;
     unlock(C1);
}

tareaB(){
   lock(C1);
   imprime(x);
}

как инициализировать этот висячий замок C1 как блокировано, в языке C.

3
задан 09.03.2017, 16:43
1 ответ

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

Получать то, к чему ты стремишься, - проще. Ты можешь использовать переменную booleana добавочная подобно flag, чтобы показывать, что есть данные, которых нужно печатать. tareaA он поместит эту переменную в true когда он будет хранить стоимость в переменной и tareaB подтвердит формы проситель эту стоимость знать, когда он должен печатать стоимость:

bool hayDato = false;

tareaA(){
  lock(C1);
  x=rand()%5;
  hayDato = true;
  unlock(C1);
}

tareaB(){
  lock(C1);
  if( hayDato == true ){
    hayDato = false;
    imprime(x);
  }
  unlock(C1);
}

PD.: bool это прозвище, определенное в заголовке stdbool.h.

Приветствие.

1
ответ дан 24.11.2019, 14:53
  • 1
    Я благодарен за твой ответ я sirvi и # 243; многого и прости из-за tard и # 237; в ответ. – Iras 07.08.2016, 00:49

Теги

Похожие вопросы