<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alice816102的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Alice816102</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alice816102]]></copyright><item><title><![CDATA[12.9 线程与fork]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577206</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577206</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:54:00 +0800</pubDate><description><![CDATA[当一个线程调用函数fork的时候，整个进程地址空间会被拷贝到子进程中，在8.3节中有提到copy-on-write.子进程是一个与父进程完全不同的进程，但是如果父进程和子进程都没有对内存内容进行修改，那么该内存页就可以在父进程与子进程之间进行共享。 
通过继承父进程的整个地址空间，子进程也会继承父进程每个互斥锁，读写锁以及条件变量的状态，如果父进程包含了多个线程，而且在fork函...]]></description><category></category></item><item><title><![CDATA[12.8 线程和信号]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577204</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577204</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:52:00 +0800</pubDate><description><![CDATA[在基于进程模型的信号处理已经比较吗麻烦了，引入线程后事情就更加复杂了。 
每个线程拥有其自身的信号掩码，但是信号处理函数是被进程内的所有线程共享的，作为一个推论，独立的线程能够阻塞信号，但是如果一个线程修改与给定信号的处理动作的时候，所有的线程都会共享这一修改。也就是说，如果一个线程选择忽略一个给定信号，其他的线程可能会通过恢复默认呢处理或者是安装信号处理函数的方式撤销线程所做的...]]></description><category></category></item><item><title><![CDATA[12.8 线程和信号]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577208</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577208</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:51:00 +0800</pubDate><description><![CDATA[在基于进程模型的信号处理已经比较吗麻烦了，引入线程后事情就更加复杂了。 
每个线程拥有其自身的信号掩码，但是信号处理函数是被进程内的所有线程共享的，作为一个推论，独立的线程能够阻塞信号，但是如果一个线程修改与给定信号的处理动作的时候，所有的线程都会共享这一修改。也就是说，如果一个线程选择忽略一个给定信号，其他的线程可能会通过恢复默认呢处理或者是安装信号处理函数的方式撤销线程所做的...]]></description><category></category></item><item><title><![CDATA[12.7 Cancal选项]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577202</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577202</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:51:00 +0800</pubDate><description><![CDATA[还有两个线程属性并没有包含在pthread_attr_t结构中，它们是cancelability state以及cancelability type。这两个属性影响了线程对于函数调用pthread_cancel的相应行为。(11.5节) 
cancelability state属性可以取值PTHREAD_CANCEL_ENABLE或者是PTHREAD_CANCEL_DISABLE...]]></description><category></category></item><item><title><![CDATA[12.6 线程私有数据]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577198</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577198</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:49:00 +0800</pubDate><description><![CDATA[线程私有数据是一种用于存储和获取与特定线程相关联数据的机制，称为线程特定的或者是线程私有的，是因为我们希望每个线程都可以独立访问其独有的数据，而不用担心与其他线程的同步访问问题。 
许多人费力实现了促进进程数据以及属性贡献的线程模型，那么为什么还有人想要实现一个接口，在这样一个模型中防止共享呢？有如下两点原因： 
首先，有些时候我们需要以线程为基础维护一些数据，因为没有任何机制...]]></description><category></category></item><item><title><![CDATA[12.5 重入]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577207</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577207</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:47:00 +0800</pubDate><description><![CDATA[我们在10.6节中讨论了可重入函数以及信号处理函数，线程与信号处理函数在重入方面是非常相似的。多线程的控制的本质也是同时调用相同的函数。 
 
如果一个函数可以被多个线程同时安全地调用，我们称该函数为线程安全的(thread-safe).除了图12.9列出的函数之外，The Single Unix Specification定义的其他函数都是线程安全的，此外，ctermid以及...]]></description><category></category></item><item><title><![CDATA[12.4 同步属性]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577203</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577203</guid><author>Alice816102</author><pubDate>Sat, 02 Jul 2016 19:45:00 +0800</pubDate><description><![CDATA[12.4.1 互斥锁属性ExampleExample12.4.2 读写锁属性12.4.3 条件变量属性12.4.4 Barrier属性

12.4.1 互斥锁属性

互斥锁属性使用结构pthread_mutexattr_t结构进行存储，在11章中，我们使用PTHREAD_MUTEX_INITIALIZER常量或者是调用函数pthread_mutex_init并传参NULL指...]]></description><category></category></item><item><title><![CDATA[12.3 线程属性]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577196</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577196</guid><author>Alice816102</author><pubDate>Tue, 21 Jun 2016 02:34:00 +0800</pubDate><description><![CDATA[pthread接口允许我们通过设置与不同对象相关联的属性来微调线程以及同步对象的行为。通常来说，管理这些属性的函数符合如下模式:


每一个对象都有与其相关联的属性对象类型(线程由线程属性，互斥锁由互斥锁属性，等等)，一个属性对象可以表示多个属性。属性对象对于应用程序来说是不透明的，也就是说应用程序并支持获取属性对象内部结构，这能够促进应用程序的移植。取而代之的是，应用程序需...]]></description><category></category></item><item><title><![CDATA[12.2 线程限制]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577194</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577194</guid><author>Alice816102</author><pubDate>Tue, 21 Jun 2016 02:34:00 +0800</pubDate><description><![CDATA[我们已经在2.5.4节中讨论了函数sysconf,The Single Unix Specification定义了与线程操作相关的几个限制。与其他系统限制一样，线程限制也可以使用函数sysconf进行查询，图12.1总结了这些限制. 
与其他使用sysconf获取到的系统限制一样，这些限制的应用是为了促进应用程序在不同操作系统实现上的可移植性，比如说，如果你的应用程序需要你为你所...]]></description><category></category></item><item><title><![CDATA[12.1 线程控制简介]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577201</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577201</guid><author>Alice816102</author><pubDate>Tue, 21 Jun 2016 02:33:00 +0800</pubDate><description><![CDATA[在11章中，我们已经学习了线程以及线程同步的基础知识。在本章中，我们将会学习控制线程行为的细节，我们将会看到线程属性，同步函数属性。这些概念在上一章中被默认行为代替了。 
接下来还会介绍线程如何在同一进程内保存线程私有数据，然后将会以基于进程的系统调用对于线程的影响结束本章的学习。 
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/U20101...]]></description><category></category></item><item><title><![CDATA[11.6 线程同步]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577199</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577199</guid><author>Alice816102</author><pubDate>Tue, 21 Jun 2016 00:15:00 +0800</pubDate><description><![CDATA[11.6.1 互斥Example11.6.2 避免死锁Example11.6.3 pthread_mutex_timedlock 函数Example11.6.4Reader-Writer LocksExample11.6.5 带有超时功能的读写锁11.6.6 条件变量Example11.6.7 自旋锁11.6.8 BarriersExample 
当多个线程控制流需要共享内存的时...]]></description><category></category></item><item><title><![CDATA[11.5 线程终止]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577192</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577192</guid><author>Alice816102</author><pubDate>Sun, 05 Jun 2016 19:38:00 +0800</pubDate><description><![CDATA[如果进程内任意线程调用了exit,_Exit或者是_exit,那么整个进程就会终止运行，类似地，当某信号的处理是终止进程的时候，该信号被发送到任一线程也将会终止整个进程(我们将在12.8节中更多地讨论信号与线程的交互)。 
仅仅终止单个线程，而不是整个进程的方法有三种：


线程可以简单地从线程启动函数内返回，返回值就是线程的退出码；
线程可以被相同进程被的其他线程取消运...]]></description><category></category></item><item><title><![CDATA[11.4 线程创建]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577197</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577197</guid><author>Alice816102</author><pubDate>Sat, 04 Jun 2016 02:10:00 +0800</pubDate><description><![CDATA[传统UNIX程序模型中每一个进程都只支持一个线程控制，在概念上，这与每个线程仅仅由一个线程组成的线程模型是一样的。采用pthreads以后，当一个程序运行的时候，系统也会启动一个单线程控制进程，当程序运行的时候，其行为与传统进程并没有什么明显区别，除非它创建了多线程控制，其他线程可以通过调用函数pthread_create来创建。

#include &lt;pthread.h...]]></description><category></category></item><item><title><![CDATA[11.3 线程ID]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577190</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577190</guid><author>Alice816102</author><pubDate>Sat, 04 Jun 2016 00:48:00 +0800</pubDate><description><![CDATA[正如每一个进程都有一个进程ID一样，每一个线程都有一个线程ID.与进程ID在系统内是唯一的不同，线程ID仅仅在其所属进程的上下文中有意义。 
进程ID是使用数据类型pid_t来进行表示的，该类型是一个非负整数。线程ID使用pthread_t进行存储，实现可以使用一个结构来进行存储，所以可移植程序不能将他们当做整数对待，因此，对于线程ID的比较需要使用专门的函数实现:

#in...]]></description><category></category></item><item><title><![CDATA[11.2 线程概念]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577195</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577195</guid><author>Alice816102</author><pubDate>Fri, 03 Jun 2016 08:16:00 +0800</pubDate><description><![CDATA[典型的UNIX程序被认为是单线程控制的:每一个进程在一个时刻仅仅做一件事；引入多线程以后，我们可以在单个进程内设计程序同时执行多个任务，该方法有如下几个好处:


我们可以简化异步时间处理的程序的设计：对于每一种时间类型非配一个单独的线程，每一个线程都可以使用同步模型来处理事件，同步编程模型比异步编程模型更加简单。
多进程要实现内存和文件描述符共享需要使用操作系统提供的复杂...]]></description><category></category></item><item><title><![CDATA[11.1 线程简介]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577193</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577193</guid><author>Alice816102</author><pubDate>Thu, 02 Jun 2016 00:50:00 +0800</pubDate><description><![CDATA[我们已经中讨论了进程，我们学习了UNIX进程的环境，进程间的关系，控制进程的方法，进程间的关系；同时我们也看到进程间共享的资源时非常少的。 
在本章中，我们将学习如何使用多线程控制来实现单个进程环境内执行多个线程，所有单个进程内的线程都有权限访问相同的进程组件，比如说文件描述符以及内存。 
任何是否你只要在多个用户之间共享文件的话，你就必须处理好一致性。我们将在本章最后多线程处...]]></description><category></category></item><item><title><![CDATA[10.22 信号名称与编号]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577191</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577191</guid><author>Alice816102</author><pubDate>Wed, 01 Jun 2016 23:52:00 +0800</pubDate><description><![CDATA[在本节中，我们将会讲述如何在信号编号与信号名称之间进行映射。一些系统提供了数组 
extern char *sys_siglist[]; 
其中数组索引就是信号编号，给出一个指向信号名称字符串的指针。


  FreeBSD 8.0, Linux 3.2.0以及 Mac OS X 10.6.8都提供了这个信号名称的数组，Solaris 10也提供了，但是指针数组名称为_s...]]></description><category></category></item><item><title><![CDATA[10.21 作业控制信号]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577189</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577189</guid><author>Alice816102</author><pubDate>Wed, 01 Jun 2016 22:50:00 +0800</pubDate><description><![CDATA[POSIX.1使用了六个信号来实现作业控制：


SIGCHLD        子进程已经停止或者终止
SIGCONT        已经停止的进程继续运行
SIGSTOP        停止进程信号(不能捕获或者忽略)
SIGTSTP        交互式停止信号
SIGTTIN         后台进程组成员从控制终端读取
SIGTTOU       后台进程组...]]></description><category></category></item><item><title><![CDATA[10.20 sigqueue函数]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577163</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577163</guid><author>Alice816102</author><pubDate>Mon, 30 May 2016 00:08:00 +0800</pubDate><description><![CDATA[在10.8节中我们讲到许多UNIX系统并不支持信号的排队，随着POSIX.1增加了实时扩展，一些系统开始支持信号队列，在SUSv4中，信号队列功能已经从实时扩展中移到了基本规范中了。 
通常来说，一个信号只能携带一个bit的信息:即是信号本身。除了排队的信号之外，这些扩展还允许应用程序在信号发送的同时传递更多的信息，这些信息被嵌入到了一个siginfo结构中，连同系统提供的信息一...]]></description><category></category></item><item><title><![CDATA[10.19 sleep,nanosleep以及clock_nanosleep函数]]></title><link>https://blog.youkuaiyun.com/Alice816102/article/details/101577170</link><guid>https://blog.youkuaiyun.com/Alice816102/article/details/101577170</guid><author>Alice816102</author><pubDate>Sun, 29 May 2016 21:51:00 +0800</pubDate><description><![CDATA[我们已经在本书中多次使用了函数sleep,我们也在图10.7以及图10.8中展示了两个有缺陷的sleep函数的实现。

#include &lt;unistd.h&gt;unisgned int sleep(unsigned int seconds);    Returns:0 or number of unslept seconds.

该函数会造成进程挂起直到如下两个条...]]></description><category></category></item></channel></rss>