Board logo

标题: 同步和互斥(2) [打印本页]

作者: yuyang911220    时间: 2015-11-22 17:22     标题: 同步和互斥(2)

四、进程及线程的比较以及注意事项线程是多线程编程中的主编程接口。线程仅在进程内部是可见的,进程内部的线程会共享诸如地址空间、打开的文件等所有进程资源。由于线程可共享进程指令和大多数进程数据,因此一个线程对共享数据进行的更改对进程内其他线程是可见的。一个线程需要与同一个进程内的其他线程交互时,该线程可以在不涉及操作系统的情况下进行此操作。
进程是操作系统分配资源的单位,不同的进程拥有的资源不同,比如地址空间、打开的文件等等。
1.多线程编程的特殊之处因为多线程共享进程的大多数数据,因此也引入了新的注意事项:
可重入函数编写规范:
线程安全与可重入函数之间的关系:
例如标准库中的malloc是不可重入的,但是标准库的实现一般都有提供线程安全的版本(具体怎么用线程安全的版本可以查看使用的库的手册,总之小心一点)。
线程安全和可重入函数针对的是多线程环境下,由多个线程共享的资源(静态数据、全局数据)的使用问题。之所以有这个问题是因为在某些函数会使用静态或者全局数据,它运行的结果依赖于这些数据,这时如果此类函数在运行中被切换走,然后另一个线程也调用了该函数就会出问题,因此这类问题是特定存在于多线程环境的(当然类似的问题在进程环境下也存在,存在的原因是信号处理函数可能在任意时刻被调用,因而它可能打断进程的正常运行;多个进程之间是不存在这类问题的,因为每个进程看到的都是自己独立的地址空间)。
2.同步和互斥的实现
需要注意的是,并没有所谓的线程间通信,因为同一个进程内部的线程会共享该进程的资源,比如堆空间、打开的文件等等,因而同一个进程内的多个线程之间不存在通信问题;如果是不同进程之间的线程,就按照进程之间通信方式进行通信即可。
3.何时采用多线程何时采用多进程这是一个比较艰难的抉择,取决于应用场景,它们的区别或许是有参考价值的:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0