?? qmutex.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-x11-commercial-3.0.5/src/tools/qmutex_unix.cpp:367 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>QMutex類</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
<a href="index.html">
<font color="#004faf">主頁</font></a>
| <a href="classes.html">
<font color="#004faf">所有的類</font></a>
| <a href="mainclasses.html">
<font color="#004faf">主要的類</font></a>
| <a href="annotated.html">
<font color="#004faf">注釋的類</font></a>
| <a href="groups.html">
<font color="#004faf">分組的類</font></a>
| <a href="functions.html">
<font color="#004faf">函數(shù)</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>QMutex類參考</h1>
<p>QMutex類提供的是線程之間的訪問順序化。
<a href="#details">詳情請見……</a>
<p><tt>#include <<a href="qmutex-h.html">qmutex.h</a>></tt>
<p><a href="qmutex-members.html">所有成員函數(shù)的列表。</a>
<h2>公有成員</h2>
<ul>
<li><div class=fn><a href="#QMutex"><b>QMutex</b></a> ( bool recursive = FALSE )</div></li>
<li><div class=fn>virtual <a href="#~QMutex"><b>~QMutex</b></a> ()</div></li>
<li><div class=fn>void <a href="#lock"><b>lock</b></a> ()</div></li>
<li><div class=fn>void <a href="#unlock"><b>unlock</b></a> ()</div></li>
<li><div class=fn>bool <a href="#locked"><b>locked</b></a> ()</div></li>
<li><div class=fn>bool <a href="#tryLock"><b>tryLock</b></a> ()</div></li>
</ul>
<hr><a name="details"></a><h2>詳細描述</h2>
QMutex類提供的是線程之間的訪問順序化。
<p>
<p> QMutex的目的是保護一個對象、數(shù)據(jù)結(jié)構(gòu)或者代碼段,所以同一時間只有一個線程可以訪問它。(在Java術(shù)語中,它和同步關(guān)鍵字“synchronized”很相似)。例如,這里有一個方法打印給用戶兩條消息:
<p> <pre>
void someMethod()
{
<a href="qapplication.html#qDebug">qDebug</a>("Hello");
<a href="qapplication.html#qDebug">qDebug</a>("World");
}
</pre>
<p> 如果同時在兩個線程中調(diào)用這個方法,結(jié)果的順序?qū)⑹牵?<p> <pre>
Hello
Hello
World
World
</pre>
<p> 如果你使用了一個互斥量:
<p> <pre>
QMutex mutex;
void someMethod()
{
mutex.<a href="#lock">lock</a>();
<a href="qapplication.html#qDebug">qDebug</a>("Hello");
<a href="qapplication.html#qDebug">qDebug</a>("World");
mutex.<a href="#unlock">unlock</a>();
}
</pre>
<p> 用Java的術(shù)語,這段代碼應(yīng)該是:
<p> <pre>
void someMethod()
{
synchronized {
<a href="qapplication.html#qDebug">qDebug</a>("Hello");
<a href="qapplication.html#qDebug">qDebug</a>("World");
}
}
</pre>
<p> 然后同一時間只有一個線程可以運行someMethod并且消息的順序也一直是正確的。當然,這只是一個很簡單的例子,但是它適用于任何需要按特定頻率發(fā)生的情況。
<p> 但你在一個線程中調(diào)用<a href="#lock">lock</a>(),其它線程將會在同一地點試圖調(diào)用lock()來阻塞,知道這個線程調(diào)用<a href="#unlock">unlock</a>()之后其它線程才會獲得這個鎖。lock()的一種非阻塞選擇是<a href="#tryLock">tryLock</a>()。
<p>也可以參考<a href="environment.html">環(huán)境類</a>和<a href="thread.html">線程類</a>。
<hr><h2>成員函數(shù)文檔</h2>
<h3 class=fn><a name="QMutex"></a>QMutex::QMutex ( bool recursive = FALSE )
</h3>
構(gòu)造一個新的互斥量。這個互斥量是在沒有鎖定的狀態(tài)下創(chuàng)建的。如果<em>recursive</em>為真,就構(gòu)造一個遞歸互斥量,如果<em>recursive</em>為假(默認值),就構(gòu)造一個普通互斥量。對于一個遞歸互斥量,一個線程可以鎖定一個互斥量多次并且只有在相同數(shù)量的<a href="#unlock">unlock</a>()調(diào)用之后,它才會被解鎖。
<h3 class=fn><a name="~QMutex"></a>QMutex::~QMutex ()<tt> [虛]</tt>
</h3>
銷毀這個互斥量。
<h3 class=fn>void <a name="lock"></a>QMutex::lock ()
</h3>
試圖鎖定互斥量。如果另一個線程已經(jīng)鎖定這個互斥量,那么這次調(diào)用將<em>阻塞</em>直到那個線程把它解鎖。
<p> <p>也可以參考<a href="#unlock">unlock</a>()和<a href="#locked">locked</a>()。
<h3 class=fn>bool <a name="locked"></a>QMutex::locked ()
</h3>
如果互斥量被另一個線程鎖定了,返回真,否則返回假。
<p> <b>警告:</b>由于不同平臺上遞歸互斥量的實現(xiàn)不同,所以從以前鎖定這個互斥量的同一個線程上調(diào)用這個函數(shù)可能會返回未定義的結(jié)果。
<p> <p>也可以參考<a href="#lock">lock</a>()和<a href="#unlock">unlock</a>()。
<h3 class=fn>bool <a name="tryLock"></a>QMutex::tryLock ()
</h3>
試圖鎖定互斥量。如果鎖被得到,這個函數(shù)返回真。如果另一個進程已經(jīng)鎖定了這個互斥量,這個函數(shù)返回假,而不是一直等到這個鎖可用為止,比如,它不是阻塞的。
<p> 在另一個線程可以成功鎖定它之前,這個鎖必須被調(diào)用<a href="#unlock">unlock</a>()來解鎖。
<p> <p>也可以參考<a href="#lock">lock</a>()、<a href="#unlock">unlock</a>()和<a href="#locked">locked</a>()。
<h3 class=fn>void <a name="unlock"></a>QMutex::unlock ()
</h3>
解鎖這個互斥量。試圖對不同的線程中鎖定的互斥量進行解鎖將會返回一個錯誤。對一個沒有鎖定的互斥量進行解鎖的結(jié)果是將導(dǎo)致未定義的行為(不同的操作系統(tǒng)的線程實現(xiàn)是有很大不同的)。
<p> <p>也可以參考<a href="#lock">lock</a>()和<a href="#locked">locked</a>()。
<!-- eof -->
<hr><p>
這個文件是<a href="index.html">Qt工具包</a>一部分。
版權(quán)所有 © 1995-2002
<a href="http://www.trolltech.com/">Trolltech</a>。保留所有權(quán)利。
<p><address><hr><div align=center>
<table width=100% cellspacing=0 border=0><tr>
<td>Copyright © 2002
<a href="http://www.trolltech.com">Trolltech</a>
<td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a>
<td><a href="zh_CN.html">譯者:Cavendish</a>
<td align=right><div align=right>Qt 3.0.5版</div>
</table></div></address></body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -