一 线程的控制
互斥:多线程访问临界资源时,存在资源竞争,造成数据混乱。
临界资源:多个线程可以同时操作的资源空间,全局变量,资源共享
如何解决:
互斥:多个线程访问临界资源时,进行排他性访问(同一时刻只允许一个线程对该临界资源进行访问)
互斥锁(lock):解决多线程访问临界资源时,存在资源竞争问题
其过程如下:
代码示例:避免了互斥现象
#include <stdio.h>
#include <pthread.h>
int num_g = 0;
pthread_mutex_t mutex;
void *task1(void *arg)
{
for (int i = 0; i < 100000; i++)
{
pthread_mutex_lock(&mutex);
num_g = num_g+1;
printf("num_g = %d\n", num_g);
pthread_mutex_unlock(&mutex);
}
}
void *task2(void *arg)
{
for (int i = 0; i < 100000; i++)
{
pthread_mutex_lock(&mutex);
num_g = num_g+1;
printf("num_g = %d\n", num_g);
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, const char *argv[])
{
pthread_t tid[2];
pthread_mutex_init(&mutex, NULL);
pthread_create(&tid[0], NULL, task1, NULL);
pthread_create(&tid[1], NULL, task1, NULL);
pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
线程间的同步
信号的使用 :
代码示例:模仿10个人从ATM取钱