线程与进程
1.进程由于资源独立,进程的主要关注是解决资源共享
2.线程先天是数据共享,线程主要关注共享数据脏
1.互斥量(线程内)
读写锁
2.信号/条件量调度(线程之间)
信号量
一.线程的信号量
1.定义信号量sem_t
2.初始化信号量sem_init
3.操作信号量sem_post sem_wait
4.释放信号量sem_destroy
5.其他函数sem_getvalue
案例:
创建一个子线程
子线程-信号量(阻塞)
主线程+信号量(解除阻塞)
体会:
信号量可以累加
编程完成:
摇奖程序,继续暂停7位随机数
信号量/条件量/信号?
目的:选择哪种技术实现?
1.无法使用互斥与读写锁实现.
2.信号实现不稳定.
3.没有互斥建议不考虑条件量.
4.最佳选择信号量.
二.线程的读写锁
pthread_rwlock_t;
pthread_rwlock_init;
pthread_rwlock_destroy;
pthread_rwlock_rdlock;
pthread_rwlock_wrlock;
pthread_rwlock_unlock;
读读兼容
写写互斥
读写互斥
作用主要是为IO操作设计.
三.线程私有数据(了解)
pthread_key_create
pthread_key_delete
1.进程由于资源独立,进程的主要关注是解决资源共享
2.线程先天是数据共享,线程主要关注共享数据脏
1.互斥量(线程内)
读写锁
2.信号/条件量调度(线程之间)
信号量
一.线程的信号量
1.定义信号量sem_t
2.初始化信号量sem_init
3.操作信号量sem_post sem_wait
4.释放信号量sem_destroy
5.其他函数sem_getvalue
案例:
创建一个子线程
子线程-信号量(阻塞)
主线程+信号量(解除阻塞)
体会:
信号量可以累加
+-操作单位是1
sem.c
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
sem_t sem;//
void *run(void*d)
{
while(1)
{
//3.
sem_wait(&sem);
printf("解除\n");
}
}
main()
{
pthread_t tid;
//2
sem_init(&sem,0,5);
pthread_create(&tid,0,run,0);
while(1)
{
//
sleep(1);
sem_post(&sem);//加信号量(信号量可以累加)
}
}
编程完成:
摇奖程序,继续暂停7位随机数
信号量/条件量/信号?
目的:选择哪种技术实现?
1.无法使用互斥与读写锁实现.
2.信号实现不稳定.
3.没有互斥建议不考虑条件量.
4.最佳选择信号量.
二.线程的读写锁
pthread_rwlock_t;
pthread_rwlock_init;
pthread_rwlock_destroy;
pthread_rwlock_rdlock;
pthread_rwlock_wrlock;
pthread_rwlock_unlock;
读读兼容
写写互斥
读写互斥
作用主要是为IO操作设计.
三.线程私有数据(了解)
pthread_key_create
pthread_key_delete