如何有效进行宁波网站建设培训以提升响应式网站设计技能?
摘要:响应网站建设,宁波网站建设培训,wordpress主题使用,做网站公司怎么找客户目录 复习目标: 1 互斥锁 1.1互斥锁的使用步骤 1.2 练习 1.3 死锁 2 读写锁 3 条件变量 4 信号量 复习目标&
响应网站建设,宁波网站建设培训,wordpress主题使用,做网站公司怎么找客户目录
复习目标#xff1a;
1 互斥锁
1.1互斥锁的使用步骤
1.2 练习
1.3 死锁
2 读写锁
3 条件变量
4 信号量 复习目标#xff1a;
熟练掌握互斥量的使用说出什么叫死锁以及解决方案熟练掌握读写锁的使用熟练掌握条件变量的使用理解条件变量实现的生产消费者模型理解…目录
复习目标
1 互斥锁
1.1互斥锁的使用步骤
1.2 练习
1.3 死锁
2 读写锁
3 条件变量
4 信号量 复习目标
熟练掌握互斥量的使用说出什么叫死锁以及解决方案熟练掌握读写锁的使用熟练掌握条件变量的使用理解条件变量实现的生产消费者模型理解信号量实现的生产消费者模型
1 互斥锁
1.1互斥锁的使用步骤
第1步创建一把互斥锁
pthread_mutex_t mutex;
初始化互斥锁
pthread_mutex_init(mutex);---相当于mutex1
在代码中寻找共享资源也称为临界区
pthread_mutex_lock(mutex); -- mutex 0
[临界区代码]
pthread_mutex_unlock(mutex); -- mutex 1
释放互斥锁资源
pthread_mutex_destroy(mutex);
注意必须在所有操作共享资源的线程上都加上锁否则不能起到同步的效果 #include stdlib.h
#include string.h
#include stdio.h
#include sys/types.h
#include unistd.h
#include pthread.h
#include time.h
#include sys/types.h//定义一把锁
pthread_mutex_t mutex;void *mythread1(void *args)
{while (1){//加锁pthread_mutex_lock(mutex);printf(hello );sleep(rand() % 3);printf(world\n);//解锁pthread_mutex_unlock(mutex);sleep(rand() % 3);}pthread_exit(NULL);
}void *mythread2(void *args)
{while (1){//解锁pthread_mutex_lock(mutex);printf(HELLO);sleep(rand() % 3);printf(WORLD\n);//解锁pthread_mutex_unlock(mutex);sleep(rand() % 3);}pthread_exit(NULL);
}int main()
{int ret;pthread_t thread1;pthread_t thread2;//随机数种子srand(time(NULL));//互斥锁初始化pthread_mutex_init(mutex, NULL);ret pthread_create(thread1, NULL, mythread1, NULL);if (ret ! 0){printf(pthread_create error ,[%s]\n, strerror(ret));return -1;}ret pthread_create(thread2, NULL, mythread2, NULL);if (ret ! 0){printf(pthread_create error ,[%s]\n, strerror(ret));return -1;}//等待线程结束pthread_join(thread1, NULL);pthread_join(thread2, NULL);//释放互斥锁pthread_mutex_destroy(mutex);system(pause);return 0;
} 1.2 练习
编写思路
1 定义一把互斥锁应该为一全局变量
pthread_mutex_t mutex;
2 在main函数中对mutex进行初始化
pthread_mutex_init(mutex, NULL);
3 创建两个线程在两个线程中加锁和解锁
4 主线程释放互斥锁资源
pthread_mutex_destroy(mutex); 1.3 死锁
死锁并不是linux提供给用户的一种使用方法而是由于用户使用互斥锁不当引起的一种现象。
