Mọi người ơi, mình đọc tài liệu mà vẫn chưa rõ đa luồng hoạt động như thế nào.
- PTHREAD_MUTEX_INITIALIZER có ý nghĩa gì?
- Luồng thread1 và thread2 là thực hiện nối tiếp nhau, giả sử không dùng thread, mà mình sử dụng hai hàm funC và funC1 như các hàm bình thường và gọi nó theo thứ tự, thì nó khác gì khi sử dụng đa luồng?
Mọi người có thời gian thì trao đổi cùng mình nhé!
#include "pthread.h"
#include <stdio.h>
#include <conio.h>
int couter = 0;
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
void * funcC(void *data)
{
pthread_mutex_lock(&mutex1);
couter += 100;
printf("Gia tri couter trong Func:%d\n",couter);
pthread_mutex_unlock(&mutex1);//mở khoá biến mutex. Một lỗi trả về nếu mutex đã mở khoá hoặc được sở hữu của một thread khác.
//Khoá việc truy cập các biến của các thead khác. Do đó thực thi này có toàn quyeenf truy cập và thiết lập cho các biến
return NULL;
}
void * funcC1(void *data)
{
pthread_mutex_lock(&mutex1);
couter += 200;
printf("Gia tri couter trong Func1:%d\n",couter);
pthread_mutex_unlock(&mutex1);
return NULL;
}
int main(int argc, char * argv[])
{
pthread_t thread1, thread2;
pthread_create(&thread1,NULL,&funcC,NULL);
pthread_create(&thread2,NULL,&funcC1,NULL);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
printf("Gia tri cuoi cung cua counter: %d\n",couter);
getch();
return 0;
}