当前位置: 首页 > 编程日记 > 正文

apue读书笔记-第十二章

1 可重入,线程安全,异步信号安全之间的区别?

 可重入:可以重复进入,不会引起问题(这个概念最宽)

线程安全:被多个线程使用时,不会出问题,也就是可以被多个进程重入(新函数和被终端和被中断的函数不在同一线程)

异步信号安全:可以被信号函数重入(信号处理函数和被中断的函数在同一线程)

可重入必然线程安全,必然异步信号安全

线程安全与异步信号没有关系

举个例子,一个函数使用了全局变量,那么它是不可重入的,但是如果给它加上锁(),那么它就是线程安全的,但是不是异步信号安全的,因为此时会死锁

那么如何让它成为异步信号安全的呢?在函数开头阻塞所有信号,结尾解除阻塞,那么它就是异步信号安全的了,当然,它锁

死锁的例子:

#include"../apue.h"pthread_mutex_t mut;
void sig_usr1(int n)
{printf("%s\n","usr1");pthread_mutex_lock(&mut);pthread_mutex_unlock(&mut);printf("%s\n","usr1 end");return ;
}int waga()
{
static int n1=0;pthread_mutex_lock(&mut);printf("%s\n","lock");if(n1==0)raise(SIGUSR1);n1++;sleep(1);pthread_mutex_unlock(&mut);printf("%s\n","unlock");
}
int main()
{pthread_mutexattr_t attrt;pthread_mutexattr_init(&attrt);pthread_mutexattr_setpshared(&attrt,PTHREAD_MUTEX_NORMAL);    pthread_mutex_init(&mut,&attrt);signal(SIGUSR1,sig_usr1);waga();    
}

2,取消点有什么用?

线程并不会立即响应cancel请求,而是在取消点响应

3,多线程的fork怎么处理?

父线程获取锁——fork——父线程释放,子线程释放

多线程fork会引起很多问题,这里有一些讨论http://blog.codingnow.com/2011/01/fork_multi_thread.html

习题1,fork复制了标准io库缓冲区,所以会看到重复的输出

习题3,可以,而且要保证调用的函数同样是异步信号安全的

习题7,不懂,解释得不够详细阿

转载于:https://www.cnblogs.com/mightofcode/archive/2013/01/13/2857750.html

相关文章:

取出url中的字符_如何在JavaScript中解析URL:例如主机名,路径名,查询,哈希?...

统一资源定位符(缩写URL)是对Web资源(网页,图像,文件)的引用。URL指定资源位置和检索资源的机制(http,ftp,mailto)。例如,这是此博客文章的URL&am…

SQL Server 2008中的Pivot和UnPivot

SQL Server 2008中SQL应用系列--目录索引 今天给新成员讲解PIVOT 和 UNPIVOT示例,顺便整理了一下其用法。这是自SQL Server 2005起提供的新功能。 官方示例:http://msdn.microsoft.com/zh-cn/library/ms177410%28vsql.105%29.aspx 首先看PIVOT示例&#…

leetcode python 032 识别最长合法括号

# 给定一个只包含字符(和)的字符串,# 找到最长的有效(格式良好)括号子字符串的长度。# 对于“(()”,最长的有效括号子串是“()”,其长…

Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析

在Android系统中,Activity窗口的大小是由WindowManagerService服务来计算的。WindowManagerService服务会根据屏幕及其装饰区的大小来决定Activity窗口的大小。一个Activity窗口只有知道自己的大小之后,才能对它里面的UI元素进行测量、布局以及绘制。本文…

pcl需要注意的编译问题

pcl需要注意的编译问题 不要在头文件里 using namespace pcl 这会导致编译错误,而且根本分析不到错误在哪 不要在编译选项 里加 -marchnative 这个是让编译器根据你当前的cpu类型进行特定的编译优化, 例如 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdc11 -march…

linux python版本_linux下更新Python版本并修改默认版本

linux下更新Python版本并修改默认版本,有需要的朋友可以参考下。很多情况下拿到的服务器python版本很低,需要自己动手更改默认python版本1、从官网下载python安装包(这个版本可以是任意版本3.3 2.7 2.6等等)wget http://python.org/ftp/python/2.7/Pytho…

基于HTML5的Google水下搜索

这次愚人节的时候,Google推出了水下搜索,当然,这只是一个愚人的小把戏,不过效果非常不错,进入页面后,第一眼是一个水面的效果,水下的鲨鱼在游来游去,然后Google logo和搜索框从水面上…

windows下rpc框架thrift的环境配置

windows下rpc框架thrift的环境配置 引用链接: https://www.cnblogs.com/49er/p/7193829.html 最近在弄windows下 的Facebook的rpc 框架 thrift , 网上东西看了很多, 但是大都不能一篇到位, 这里总结了一下, 也记一下自己遇到的问题和解决的方法 这里把我在实际过程中遇见的问…

CentOS 6.3 安装 samba 共享

PHP环境在linux下,但是开发的时候用的是windows,于是我用了samba将linux的一个目录共享,然后在windows上做映射,这样就可以直接在windows下编辑linux上的文件了 首先,安装samba软件,我采用的是yum安装&…

微信小程序 长按图片不出现菜单_微信更新,新功能上了热搜

微信在推出新功能方面相当克制,但每一次总能引起全网关注。昨天,微信又因为一个小功能的改进再次上了热搜,在安卓最新的 7.0.17 版本当中,微信取消了两分钟内删除功能。在新版微信中,发出的消息在两分钟内只有撤回功能…

windows下配置java环境jdk

Windows系统下搭建java的开发环境和配置环境变量 具体步骤打开链接地址:https://www.cnblogs.com/lijuntao/p/6694483.html转载于:https://www.cnblogs.com/ccw869476711/p/9401468.html

mysql 分区_搞懂MySQL分区

一.InnoDB逻辑存储结构首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成。段段就是上图的segment区域,常见的段有数据段、索引段、回滚段等,在In…

apt Could not get lock /var/lib/dpkg/lock 解决方案

apt Could not get lock /var/lib/dpkg/lock 解决方案 删除锁定文件 sudo rm /var/lib/dpkg/lock

oracle创建DBLink连接

1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。tnsnames.ora文件在你安装oracle客户端安装文件里 如:(E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN) 创建远程连接: INT (DESCRIPTION (ADDRES…

理解oracle中连接和会话

理解oracle中连接和会话1. 概念不同:概念不同: 连接是指物理的网络连接。 在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行。 2. 关系是多对多: 一个连接上可以建立0个…

ActiveMQ消息存储持久化

转https://www.cnblogs.com/xinhuaxuan/p/6128380.html https://blog.csdn.net/lr131425/article/details/68064914 为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。 就是在发送者将消息发送出去后&…

python 非_Python函数的非固定参数

一、概述在原来的文章中我已经写了,位置参数和关键字参数,下面我们来谈谈默认参数和参数组二、默认参数默认参数指的是,我们在传参之前,先给参数制定一个默认的值。当我们调用函数时,默认参数是非必须传递的。默认参数…

C#关于面对象多态例子

//主的喂狗 class Program { static void Main(string[] args) { //我们来模拟一个主人养狗动物的例子 首先创建一个主人对象,同时主人买了条狗 //买来条狗,主人一喂,狗会吃东西 Person person ne…

ubuntu package XXX needs to be reinstalled,but I can't find an archive 问题修复

ubuntu package XXX needs to be reinstalled, but I can’t find an archive 修复 原文连接: https://blog.csdn.net/tbitwqb/article/details/78241101 内容: 不知道什么原因,可能是升级过程过关机或者其他什么情况导致当前问题的发生。 无论是apt…

CentOS6.2解决passwd: Authentication token manipulation error报错

passwd: Authentication token manipulation error这种错误可能有多种原因,就我了解的可能有/etc/passwd等文件i权限 今天在给学员上课的时候发现提示passwd: Authentication token manipulation error错误,我来简单描述今天的问题 [roothost4 Scripts]#…

Java核心技术第五章——2.Object类

Object类:所有类的超类 Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的。但是并不需要这样写: public class Emloyee extends Object 如果没有明确的指出超类,Object就被认为是这个类的超类。在Java中&#xff0…

21day学通python_铁乐学python_day21_面向对象编程3

抽象类和接口类以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/继承有两种用途:一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)二:声明某个子类兼容于某基类,定义一个接口类Interface,接口…

系统crash无法启动 tpm error / could not read size 0x8000000e

系统crash无法启动 tpm error / couldn’t read size 0x8000000e 原文连接: https://unix.stackexchange.com/questions/305719/a-tpm-error-7-occurred-attempting-to-read-a-pcr-value-in-centos 内容: 问题: I’m getting this error while booting…

ASP.NET文件的下载

/// <summary>/// 下载文件/// </summary>/// <param name"filePath">文件的路径</param>/// <param name"fileName">文件名(有时候文件名存在数据库中用于替换路径中的文件名)</param>public void FileDownLoad(stri…

TestLink1.9.3测试用例:Excel转换XML工具一

最近在整理测试用例&#xff0c;所以想找一个合适的工具来完成对测试需求、测试用例的管理。对比了一翻&#xff0c;发现开源工具中扩展比较好的还属TestLink&#xff0c;而且还可以与JIRA进行对接&#xff0c;这样就引起了我更大的兴趣。加上之前本来就接触过此工具&#xff0…

MYSQL 使用自定义表变量

mysql 用户自定义表变量&#xff0c;ENGINEMyISAM DEFAULT CHARSETgb2312; 制定编码方式&#xff0c;防止乱码 DROP TABLE IF EXISTS p_temp; create temporary TABLE p_temp ( RowIndex int ,PRIMARY KEY (RowIndex))ENGINEMyISAM DEFAULT CHARSETgb2312; 转载于:https:/…

early EOF fatal: index-pack failed

early EOF fatal: index-pack failed 原文链接: https://stackoverflow.com/questions/21277806/fatal-early-eof-fatal-index-pack-failed 内容: First, turn off compression: git config --global core.compression 0 Next, let’s do a partial clone to truncate the a…

linux下运行python unitest_Python unittest打印日志可以在Linux上运行,但在Windows上不行...

我正在尝试编写一个unittest&#xff0c;它将stdout和stderr重定向到一个写在Windows网络驱动器上的文件。出于某些原因&#xff0c;相同的脚本(只有diff.是目录路径)可以在Linux上工作&#xff0c;但在Windows上不行。在Windows上运行时&#xff0c;不会将任何内容写入日志文件…

emacs 探索之五:latex配置

最近需要使用Latex写论文&#xff0c;之前一直在用emacs&#xff0c;而且渐渐理解emacs的思想之后发现大多数事情都能够在emacs中完成&#xff0c;那么自然会想到emacs是否能够与latex相结合。Google一下发现好多方式&#xff0c;当前前提是需要安装latex软件&#xff0c;然后e…

自动填充脚本使用及注意事项

网站开发需要&#xff0c;找了几个js脚本&#xff0c;最后选择了jQuery Autocomplete Mod&#xff08;http://www.pengoworks.com/workshop/jquery/autocomplete.htm&#xff09; 稍作修改&#xff0c;改动处见中文注释 1 jQuery.autocomplete function(input, options) {2 …