Итак, я делаю программу с одним основным потоком (мой основной), который создает второй. Второй должен дождаться сигнала и запустить его. Мэйн конечно ждет присоединения.
У меня проблема с пониманием того, как мой main может блокировать мьютекс, а затем мой поток также заблокирует его и будет ждать сигнала. Я имею в виду, что это «руководство», которое все дают о том, как это делать, но я не понимаю, как это работает. Так как мьютекс блокируется при основной блокировке, поток всегда будет переходить к заблокированному отключенному каналу и ждать, пока мьютекс не будет разблокирован, нет? Таким образом, сигнал будет отправлен до того, как поток получит мьютекс и заблокируется в ожидании (поэтому он никогда не будет разбужен). Но опять же, необходимо заблокировать мьютекс, чтобы дождаться переменной ... Помогите пожалуйста. Это код, он создает цикл, потому что функция потока блокируется в ожидании ..
static pthread_mutex_t mtx;
pthread_cond_t cond;
void *threadfunction(void* arg){
pthread_mutex_lock(&mtx);
pthread_cond_wait(&cond,&mtx);
pthread_mutex_unlock(&mtx);
}
int main(void){
pthread_mutex_init(&mtx,NULL);
pthread_cond_init(&cond,NULL);
pthread_t tthread;
pthread_mutex_lock(&mtx);
pthread_create(&tthread,NULL,threadfunction,NULL);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mtx);
pthread_join(tthread,NULL);
}