﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Apollo Fang's Blog-随笔分类-POSIX thread</title><link>http://www.cppblog.com/scorpio/category/19132.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 07 Nov 2012 21:59:20 GMT</lastBuildDate><pubDate>Wed, 07 Nov 2012 21:59:20 GMT</pubDate><ttl>60</ttl><item><title>互斥锁的初始化</title><link>http://www.cppblog.com/scorpio/archive/2012/04/16/171617.html</link><dc:creator>Apollo Fang</dc:creator><author>Apollo Fang</author><pubDate>Mon, 16 Apr 2012 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/scorpio/archive/2012/04/16/171617.html</guid><wfw:comment>http://www.cppblog.com/scorpio/comments/171617.html</wfw:comment><comments>http://www.cppblog.com/scorpio/archive/2012/04/16/171617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/scorpio/comments/commentRss/171617.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/scorpio/services/trackbacks/171617.html</trackback:ping><description><![CDATA[<p style="text-align: justify; ">
</p>
<p><span style="font-size:11.0pt;font-family:宋体;">互斥锁的初始化</span></p>
<p>&nbsp;</p>
<p><span style="font-size:11.0pt;font-family:宋体;">接口</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">1&gt; </span><span style="font-size:11.0pt; font-family:宋体;">初始化互斥锁</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas;color:#0070C0">int </span><span style="font-size:11.0pt; font-family:Consolas;color:#C00000">pthread_mutexattr_init</span><span style="font-size:11.0pt;font-family:Consolas">(<span style="color:#0070C0">pthread_mutexattr_t</span> *attr);</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">2&gt; </span><span style="font-size:11.0pt; font-family:宋体;">销毁互斥锁</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas;color:#0070C0">int</span><span style="font-size:11.0pt; font-family:Consolas"> <span style="color:#C00000">pthread_mutexattr_destroy</span>(<span style="color:#0070C0">pthread_mutexattr_t</span> *attr);</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">3&gt; </span><span style="font-size:11.0pt; font-family:宋体;">设置互斥锁类型</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas;color:#0070C0">int</span><span style="font-size:11.0pt; font-family:Consolas"> <span style="color:#C00000">pthread_mutexattr_settype</span>(<span style="color:#0070C0">pthread_mutexattr_t</span> *attr, <span style="color: #0070C0">int</span> kind);</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">4&gt; </span><span style="font-size:11.0pt; font-family:宋体;">获取互斥锁类型</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas;color:#0070C0">int</span><span style="font-size:11.0pt; font-family:Consolas"> <span style="color:#C00000">pthread_mutexattr_gettype</span>(<span style="color:#0070C0">const pthread_mutexattr_t</span> *attr, <span style="color:#0070C0">int</span> *kind);</span></p>
<p>&nbsp;</p>
<p><span style="font-size:11.0pt;font-family:宋体;">互斥锁类型</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">1. <span style="color:#FF33CC">PTHREAD_MUTEX_TIMED_NP</span></span></p>
<p><span style="font-size:11.0pt;font-family:宋体;">缺省值</span><span style="font-size:11.0pt; font-family:Consolas">; </span><span style="font-size:11.0pt; font-family:宋体;">当一个线程加锁之后</span><span style="font-size:11.0pt;font-family:Consolas">, </span><span style="font-size:11.0pt;font-family:宋体;">其余请求的线程将形成一个等待队列</span><span style="font-size:11.0pt;font-family:Consolas">, </span><span style="font-size:11.0pt;font-family:宋体;">并在解锁后按照优先级获取锁</span><span style="font-size:11.0pt;font-family:Consolas">. </span><span style="font-size:11.0pt;font-family:宋体;">这种机制保证了资源分配的公平性</span><span style="font-size:11.0pt;font-family:Consolas">.</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">2. <span style="color:#FF33CC">PTHREAD_MUTEX_RECURSIVE_NP</span></span></p>
<p><span style="font-size:11.0pt;font-family:宋体;">嵌套锁</span><span style="font-size:11.0pt; font-family:Consolas">; </span><span style="font-size:11.0pt; font-family:宋体;">允许<u>同一个线程</u>对同一个锁成功获得多次</span><span style="font-size:11.0pt; font-family:Consolas">, </span><span style="font-size:11.0pt; font-family:宋体;">并通过同样次数的解锁操作释放锁</span><span style="font-size:11.0pt;font-family:Consolas">. </span><span style="font-size:11.0pt;font-family:宋体;">如果是不同线程请求</span><span style="font-size:11.0pt;font-family:Consolas">, </span><span style="font-size:11.0pt;font-family:宋体;">则在加锁线程释放锁时重新竞争</span><span style="font-size:11.0pt;font-family:Consolas">.</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">3. <span style="color:#FF33CC">PTHREAD_MUTEX_ERRORCHECK_NP</span></span></p>
<p><span style="font-size:11.0pt;font-family:宋体;">检错锁</span><span style="font-size:11.0pt; font-family:Consolas">; </span><span style="font-size:11.0pt; font-family:宋体;">如果同一个线程请求同一个锁</span><span style="font-size:11.0pt;font-family:Consolas">, </span><span style="font-size:11.0pt;font-family:宋体;">返回</span><span style="font-size:11.0pt;font-family:Consolas">EDEADLK, </span><span style="font-size:11.0pt;font-family:宋体;">否则与缺省相同</span><span style="font-size: 11.0pt;font-family:Consolas">; </span><span style="font-size:11.0pt; font-family:宋体;">这种机制避免了多次加锁产生死锁的情况</span><span style="font-size:11.0pt;font-family: Consolas">.</span></p>
<p><span style="font-size:11.0pt; font-family:Consolas">4. <span style="color:#FF33CC">PTHREAD_MUTEX_ADAPTIVE_NP</span></span></p>
<p><span style="font-size:11.0pt;font-family:宋体;">适应锁</span><span style="font-size:11.0pt; font-family:Consolas">; </span><span style="font-size:11.0pt; font-family:宋体;">仅仅等待解锁后重新竞争</span><span style="font-size:11.0pt;font-family:Consolas">.</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/scorpio/aggbug/171617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/scorpio/" target="_blank">Apollo Fang</a> 2012-04-16 13:53 <a href="http://www.cppblog.com/scorpio/archive/2012/04/16/171617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>