Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4541
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2017-02-23 08:40
个人简介

出来匝道,好多东西要多多学习

文章分类

全部博文(5)

文章存档

2017年(5)

我的朋友

分类: LINUX

2017-02-23 09:38:59

原文地址:线程的要点总结 作者:流云哭翠

线程的终止:
1,从main函数返回或是调用了exit()退出主线程,则整个进程都将终止。
2,调用pthread_exit(),仅仅是主线程消亡。进程内的其他线程不会结束。

临界资源:
临界资源是在一段时间内只能被一个线程所持有,需申请才能用,若未成功则一直等待。
它被使用完毕后必须通过释放才能被其他线程所使用。若未释放,却被等待则将造成死锁!

线程的等待(释放):
终止的线程所占用的资源不会随着线程的终止而归还给系统,而是为线程锁在的进程持有。
pthread_join()相当于进程的wait()来等待线程的终止,但是被等待的线程必须处于可join状态!
不能是pthread_detach()处理的DETACHED状态!(其实此操作也是为了避免使线程成为僵尸线程)
一个线程只允许被一个线程等待。

私有数据:
采用一键多值(不同的线程中一个相同的键所代表的值不同),设置自己的全局变量(仅在某个线程内有效),eg:errno.关键在于TDS池的可扩充结构数组。
1.为一个键指定新数据必须先释放原有数据.
2.删除一个键仅仅是键所占用的内存被释放,与该键相关的线程所占用的数据并没有被释放。因此,线程数据
   的释放必须在键的释放之前完成。

锁机制:
1.pthread_mutex_lock()加锁时,如果先前已加过锁,则当前加锁的线程就会被阻塞,直到互斥锁被其他线程释放
(因而返回即说明了加锁成功),pthread_mutex_trylock()加锁时如果先前已加过锁则不等待而是立即返回(错误值)。加锁只是单纯的加锁,锁的属性要用初始化互斥锁的函数赋予。
2.解锁的条件:其一是互斥锁必须处于加锁状态,其二是调用该函数的线程必须是给互斥锁加锁的线程!
3.互斥锁使用完毕必须清除!意味着释放锁占有的资源。要求必须处于开放状态,即已解锁。
4.互斥锁不占用内存。

条件变量:
条件变量要被正确地修改,就要受到特殊的保护,保护者就是互斥锁!通常条件表达式在互斥锁的保护下求值。
1.使用的主要操作:其一是等待条件变量为真,其二是设置条件变量为真。
2.条件变量不再使用时要将其清除。但是只有在没有线程等待条件变量时才能将其清除.

异步信号:
1.线程是在内核外实现的,信号与线程是异步的。
2.一个信号只能被一个线程接收,如果所有线程屏蔽该信号则信号会被挂起直到有信号解除屏蔽。
阅读(217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~