灵活运用Unix 线程知识
创始人
2024-06-28 20:21:10
0

今天我们来学习用Unix 线程的知识来解决问题。在 UNIX 编程中,我们会经常使用系统调用来完成期望的功能;而与此同时,我们也需要付出大段的代码来检测、输出错误和其他意外情况。

Unix 线程安全是为了避免数据竞争或者数据设置的正确性依赖于多个Unix 线程修改数据的顺序。假设你的代码所在的进程中有多个Unix 线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是Unix 线程安全的。

Unix 线程的使用中以下是系统调用失败的可能原因:

系统可能出现资源短缺或者程序使用的资源可能超过系统为单个程序规定的上限。常见的情况有:程序可能尝试分配大量内存,或者同时打开很多文件等。
程序执行操作时,可能会由于权限不足而被系统阻止。例如,程序可能会试图写一个只读的文件,或者企图访问其他进程的内存空间。 传入系统调用的参数可能无效,原因可能是用户提供无效输入或者程序本身的 bug。例如,程序可能会传入一个无效的内存地址或者无效的文件描述符。

系统调用还有可能因为程序之外的原因出错。系统调用访问硬件的时候经常会有这种情况发生。设备可能会出现异常错误或者不支持特定的操作,或者可能会出现磁盘没有插入驱动器中的情况出现。 系统调用有的时候会被外部事件 ( 如信号等 ) 中断。这可能不代表真正的调用失败,但是如果有必要,程序应当重新尝试执行系统调用。

对于函数来说,在多Unix 线程或有异常控制流的情况下 , 当某个函数运行到中途时 , 控制流 ( 也就是当前指令序列 ) 就有可能被打断而去执行另一个函数。而这个函数很有可能是它本身。如果在这种情况下不会出现问题 , 比如说数据或状态不会被破坏,行为确定。那么这个函数就被称做 " 可重入 " 的。

在多Unix 线程编程中,有两种方法使库函数可以保证其安全。一个是简单的将合适的代码使用互斥锁包起来,这样可以保证同时只有一个线程执行这一段例程。虽然这种方法大部分情况下都能奏效,但是它的性能却非常糟糕。而且对于诸如 strtok 函数,该方法就完全不能工作了,因此很多 UNIX 系统都存在 _r 的接口函数。

另一个更好的办法是确保库函数可以同时在多个Unix 线程情况下安全的执行。这里指的不仅仅是带有后缀 _r 的可重入对等函数;毕竟可重入和线程安全(Thread-Safe)是两个不同的概念:可重入函数一定是Unix 线程安全的;线程安全的函数可能是重入的,也可能是不重入的;Unix 线程不安全的函数一定是不可重入的。所以诸如 malloc,free 等函数也在此列,属于Unix 线程安全的库函数。

当然,如果你在单线程应用程序中使用Unix 线程安全函数会在一定程度上降低性能,所以尽量避免在单线程应用程序中使用它们。

【编辑推荐】

  1. 初步讲解Unix 线程知识
  2. 知识讲堂Unix内核教学
  3. 浅析Unix内核索引结点表
  4. Unix内核与Linux内核大比拼
  5. 知识讲解Unix 消息队列

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...