Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129523
  • 博文数量: 44
  • 博客积分: 956
  • 博客等级: 准尉
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-18 12:45
文章分类
文章存档

2012年(11)

2011年(33)

分类: LINUX

2012-01-04 18:53:27

线程:和资源相关的共享,和调度相关的不共享
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void*(routine)(void*), void *arg);
*thread: POSIX的id(一个类似地址), gettid()获得线程id
*attr:设置线程属性的结构,一般设置为NULL使用默认属性
routine:线程的执行体,函数指针
*arg:线程参数,一般设置为NULL
ps -eLF
主线程退出,所有的线程都退出
int pthread_join(pthread_t thread, void **value_ptr);
int pthread_exit(void **args);
int pthread_detach(pthread_t tid);
子线程和主线程脱离,子线程的资源会有系统释放
线程的取消:
int pthread_cancel(pthread_t tid);
将子线程关闭,直接干掉
同步:
互斥: 
 临界资源:
信号量:又称信号灯(POSIX)模式1:资源个数,模式2:二值信号量(锁)
P操作:申请资源
V操作:释放资源
在创建线程前,
int sem_init(sem_t *sem, int pshared, unsigned int value);
sem:初始化的信号量
pshared:为0,非0用于进程间
value:信号量初值,资源的个数
int sem_wait(sem_t *sem);
P操作
int sem_post(sem_t *sem);
V操作,很少出错,一般不需要判断
int sem_trywait(sem_t *sem);
int sem_getvalue(sem_t *sem, int *svalue);
 
int pthread_mutex_init(pthread mutex_t *mutex, pthread_mutexattr_t *attr);
attr:一般设置为默认,传NULL即可
int pthread_mutex_lock(pthread mutex_t *mutex);
int pthread_mutex_unlock(pthread mutex_t *mutex);
进程间的通信:(IPC)
传统:无名管道(pipe),有名管道(fifo), 信号(signal)
sys V:共享内存,消息队列,信号灯
BSD:套接字(socket)
无名管道:在内存中,继承管道的所有进程可以通过无名管道通信,一般使用为单工,循环队列(64KB)
int pipe(int fd[2]);0读,1写
1)当写入数据小于可写数据,全部写入
2)当写入数据大于可写数据,会阻塞,直到可写
1)当要读的数据小于可读的数据,读出需要的数据
2)当要读的数据大于可读的数据,读出所有数据
对写端操作,读端必须存在,当读端不存在时,内核会给进程发送SIGPIPE信号,结束进程
当写端不存在时,对读端读时,返回0,
阅读(1025) | 评论(0) | 转发(0) |
0

上一篇:进程基础(19)

下一篇:进程间通信(21)

给主人留下些什么吧!~~