Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1427735
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-03-05 20:04:09

什么是?  如果你的代码所在的进程中有多个在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 
  或者说:一个类或者程序所提供的接口对于线程来说是操作或者多个线程之间的切换不会导致该接口的执行结果存在,也就是说我们不用考虑同步的问题。
  线程安全问题都是由及引起的。
  若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。       线程安全就是访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
线程安全:   在多线程中使用时,不用自已做同步处理.   
线程不安全:   在多线程中使用时,   必须做线程同步,不然会有未知后果.

怎么保证处理线程不安全呢
作好互斥与同步.   
对于异常处理要完善.

线程安全中的术语,指某个环境中被调用时,能够正确地处理各个,使程序功能正确完成。

一般来说,线程安全的函数应该为每个调用它的线程分配专门的空间,来储存需要单独保存的状态(如果需要的话),不依赖于“”,把多个线程共享的变量正确对待(如,通知编译器该易失(volatile型,阻止其进行一些不恰当的优化),而且,线程安全的一般不应该修改全局对象。

很多C库代码(比如某些strtok的实现,它将多次调用中需要保持不变的状态储存在静态变量中,导致不恰当的共享)不是线程安全的,在环境中调用这些函数时,要进行特别的预防措施,或者寻找别的替代方案。般而言“线程安全”由多线程对共享资源的访问引起。如果调用某个接口时需要我们自己采取同步措施来保护该接口访问的共享资源,则这样的接口不是线程安全的.MFCSTL都不是线程安全的. 怎样才能设计出线程安全的类或者接口呢?如果接口中访问的数据都属于私有数据,那么这样的接口是线程安全的.或者几个接口对共享数据都是只读操作,那么这样的接口也是线程安全的.如果多个接口之间有共享数据,而且有读有写的话,如果设计者自己采取了同步措施,调用者不需要考虑数据同步问题,则这样的接口是线程安全的,否则不是线程安全的。

 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

阅读(1145) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

十七岁的回忆2012-03-06 09:33:45

线程就是计算机的一条条神经啊!