您的位置:首页 > 运维架构 > Linux

Linux——线程信号量 读写锁 线程的私有数据

2014-10-25 20:35 267 查看
线程与进程

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: