#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int count = 0;
pthread_mutex_t MUTEX = PTHREAD_MUTEX_INITIALIZER;
void* func1(void* a){
pthread_mutex_lock(&MUTEX);
for(;count < 4;count++){
printf("LOOP 1: %d\n",count);
sleep(1);
}
pthread_mutex_unlock(&MUTEX);
}
void* func2(void* a){
pthread_mutex_lock(&MUTEX);
for(;count < 8;count++){
printf("LOOP 2: %d\n",count);
sleep(1);
}
pthread_mutex_unlock(&MUTEX);
}
int main(){
pthread_t tid[2];
int a = 1;
int status;
if(pthread_create(tid,NULL,func1,(void*)&a))
printf("func1 error\n");
if(pthread_create(tid+1,NULL,func2,(void*)&a))
printf("func2 error\n");
//pthread_join(*tid, (void *) &status);
//pthread_join(*(tid+1), (void *) &status);
}
простой код для проверки работы потока и мьютекса.
Если я запускаю код, он просто завершается, ничего не показывая (иногда просто одна строка LOOP 1: 0)
Если я раскомментирую
//pthread_join(*tid, (void *) &status);
//pthread_join(*(tid+1), (void *) &status);
тогда это работает хорошо.
КАК это происходит? кто-нибудь, пожалуйста, объясните
tid[0]
иtid[1]
предпочтительнее*tid
и*(tid+1)
. - person Barmar   schedule 21.11.2020pthread_join()
, процесс сразу же завершится. - person Barmar   schedule 21.11.2020