⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 posix

📁 详细描述了线程的基本知识己在实际开发中的应用适合初学者的深入研究。
💻
📖 第 1 页 / 共 5 页
字号:
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型的返回值,而这个返回值也可以是其他类型,并由</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_join()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">获取。</SPAN><SPAN 
lang=EN-US><FONT face=Verdana> </FONT></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><A name=N10063><B><SPAN lang=EN-US 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: Arial; mso-bidi-font-size: 9.0pt">1</SPAN></B></A><SPAN 
style="mso-bookmark: N10063"><B><SPAN 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-size: 9.0pt">.</SPAN></B></SPAN><SPAN 
style="mso-bookmark: N10063"><B><SPAN lang=EN-US 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: Arial; mso-bidi-font-size: 9.0pt">3 
</SPAN></B></SPAN><SPAN style="mso-bookmark: N10063"><B><SPAN 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-size: 9.0pt">线程创建属性</SPAN></B></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT 
face=Verdana>pthread_create()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中的</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>attr</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">参数是一个结构指针,结构中的元素分别对应着新线程的运行属性,主要包括以下几项:</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT face=Verdana>__detachstate</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,表示新线程是否与进程中其他线程脱离同步,如果置位则新线程不能用</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_join()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">来同步,且在退出时自行释放所占用的资源。缺省为</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_CREATE_JOINABLE</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">状态。这个属性也可以在线程创建并运行以后用</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_detach()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">来设置,而一旦设置为</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_CREATE_DETACH</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">状态(不论是创建时设置还是运行时设置)则不能再恢复到</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_CREATE_JOINABLE</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">状态。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT face=Verdana>__schedpolicy</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,表示新线程的调度策略,主要包括</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>SCHED_OTHER</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">(正常、非实时)、</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>SCHED_RR</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">(实时、轮转法)和</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>SCHED_FIFO</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">(实时、先入先出)三种,缺省为</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>SCHED_OTHER</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,后两种调度策略仅对超级用户有效。运行时可以用过</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_setschedparam()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">来改变。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT face=Verdana>__schedparam</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,一个</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>struct sched_param</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">结构,目前仅有一个</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>sched_priority</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">整型变量表示线程的运行优先级。这个参数仅当调度策略为实时(即</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>SCHED_RR</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">或</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>SCHED_FIFO</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">)时才有效,并可以在运行时通过</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_setschedparam()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">函数来改变,缺省为</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>0</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT face=Verdana>__inheritsched</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,有两种值可供选择:</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_EXPLICIT_SCHED</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_INHERIT_SCHED</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,前者表示新线程使用显式指定调度策略和调度参数(即</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>attr</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中的值),而后者表示继承调用者线程的值。缺省为</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_EXPLICIT_SCHED</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT face=Verdana>__scope</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,表示线程间竞争</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>CPU</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的范围,也就是说线程优先级的有效范围。</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>POSIX</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的标准中定义了两个值:</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_SCOPE_SYSTEM</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_SCOPE_PROCESS</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,前者表示与系统中所有线程一起竞争</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>CPU</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">时间,后者表示仅与同进程中的线程竞争</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>CPU</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。目前</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>LinuxThreads</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">仅实现了</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>PTHREAD_SCOPE_SYSTEM</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一值。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN lang=EN-US><FONT face=Verdana>pthread_attr_t</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">结构中还有一些值,但不使用</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_create()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">来设置。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为了设置这些属性,</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>POSIX</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">定义了一系列属性设置函数,包括</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_attr_init()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>pthread_attr_destroy()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和与各个属性相关的</SPAN><SPAN 
lang=EN-US><FONT 
face=Verdana>pthread_attr_get---/pthread_attr_set---</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">函数。</SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><A name=N10081><B><SPAN lang=EN-US 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: Arial; mso-bidi-font-size: 9.0pt">1</SPAN></B></A><SPAN 
style="mso-bookmark: N10081"><B><SPAN 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-size: 9.0pt">.</SPAN></B></SPAN><SPAN 
style="mso-bookmark: N10081"><B><SPAN lang=EN-US 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: Arial; mso-bidi-font-size: 9.0pt">4 
</SPAN></B></SPAN><SPAN style="mso-bookmark: N10081"><B><SPAN 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-size: 9.0pt">线程创建的</SPAN></B></SPAN><SPAN 
style="mso-bookmark: N10081"><B><SPAN lang=EN-US 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: Arial; mso-bidi-font-size: 9.0pt">Linux</SPAN></B></SPAN><SPAN 
style="mso-bookmark: N10081"><B><SPAN 
style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-size: 9.0pt">实现</SPAN></B></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" 
align=left><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">我们知道,</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>Linux</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的线程实现是在核外进行的,核内提供的是创建进程的接口</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>do_fork()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。内核提供了两个系统调用</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>__clone()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>fork()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">,最终都用不同的参数调用</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>do_fork()</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">核内</SPAN><SPAN 
lang=EN-US><FONT face=Verdana>API</FONT></SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。当然,要想实现线程,没有核心对多进程(其实是轻量级进程)共享数据段的支持是不行的,因此,</SPAN><SPAN 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -