真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c++的mutex怎么用

本篇內(nèi)容介紹了“c++的mutex怎么用”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

在宣化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),宣化網(wǎng)站建設(shè)費(fèi)用合理。

面臨的問題

多線程同時操作一段數(shù)據(jù)時,線程調(diào)度由操作系統(tǒng)控制,在機(jī)器碼層次進(jìn)行,所以訪問同一數(shù)據(jù)的多個任務(wù)(線程)的代碼隨機(jī)交替執(zhí)行,從而導(dǎo)致任務(wù)(線程)間數(shù)據(jù)交換不能正常進(jìn)行。

解決問題的方式

問題搞清楚以后,對策當(dāng)然就是保證每個線程內(nèi)操作數(shù)據(jù)的處理的完整性。但是C/C++中達(dá)成這個目標(biāo)的手段不是將數(shù)據(jù)保護(hù)起來,而是限制操作數(shù)據(jù)的代碼的同時執(zhí)行。具體說,就是在開始執(zhí)行操作數(shù)據(jù)的代碼之前先通過mutex::lock方法鎖定互斥量,然后執(zhí)行對數(shù)據(jù)進(jìn)行操作的代碼。數(shù)據(jù)操作代碼執(zhí)行完了之后,再通過mutex::unlock釋放互斥量。在互斥量的鎖定期間其他線程無法鎖定信號量。

由于操作系統(tǒng)可以保證同一時刻只有一個線程可以鎖定成功,所以只要程序在所有操作同一數(shù)據(jù)的代碼之前都有鎖定互斥量的動作,結(jié)果上就可以保證同一時刻只有一段操作數(shù)據(jù)的代碼可以執(zhí)行,而不被其他操作改數(shù)據(jù)的代碼打斷。這樣就間接保證了數(shù)據(jù)的完整性。

注意事項(xiàng)

根據(jù)上面的描述,可以知道,使用Mutex進(jìn)行數(shù)據(jù)交互必須遵循以下原則:

  1. 所有操作數(shù)據(jù)的代碼在執(zhí)行之前必須首先嘗試鎖定同一個互斥量

  2. 只有在互斥量鎖定成功的情況下才允許執(zhí)行操作數(shù)據(jù)的代碼

  3. 操作數(shù)據(jù)的代碼執(zhí)行以后,必須釋放互斥量

如果在操作數(shù)據(jù)之前沒有鎖定互斥量的過程,或者鎖定的是不同的互斥量,無論哪一種情況都達(dá)成不了同一時刻,只有一段代碼執(zhí)行的目標(biāo)。

如果操作數(shù)據(jù)的代碼執(zhí)行之后沒有釋放互斥量,后續(xù)處理數(shù)據(jù)的代碼將永遠(yuǎn)不能鎖定互斥量,也就是說,后續(xù)的數(shù)據(jù)處理不能繼續(xù)執(zhí)行。

請按照上述原則在審視一下代碼,主要關(guān)注mutex:

QMutex mutex;    
//define CreateDataTask class.
class CreateDataTask : public QThread
{
public:
   CreateDataTask(QMutex& mutex)
       :m_mutex(mutex)
  {
  }
private:
   QMutex& m_mutex;
   void run()
   {
       for(int i = 0; i < 10; ++i)
       {
           m_mutex.lock();
           cout << "WT:<<<                             << "<<<<" << endl;
           WriteData();
           m_mutex.unlock();
       }
   }
};

::timeBeginPeriod(1);
//Create thread object of CreateDataTask.
CreateDataTask *writer = new CreateDataTask(mutex);
//Start Thread.
writer->start(QThread::NormalPriority);
for(int i = 0; i < 10; ++i)
{
   mutex.lock();
   cout << "RT:>>>>ReadData:" << i
                      << ">>>>" << endl;
   ReadData();
   data_array.clearData();
   mutex.unlock();
}

timeEndPeriod(1);

應(yīng)該講點(diǎn)原則

有一種說法,飛機(jī)是試飛員飛出來的,估計也會有很多人說,程序是程序員Debug出來的。這種觀點(diǎn)作者實(shí)在是不敢茍同。多任務(wù)編程就是一個不能靠調(diào)試解決問題的例子。必須遵循上面的原則,否則的話程序的動作會有很大的不確定性。在開發(fā)的最后階段,多任務(wù)相關(guān)的問題都會占有相當(dāng)大的比例。那簡直就是程序員的噩夢。

“c++的mutex怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


新聞名稱:c++的mutex怎么用
路徑分享:http://weahome.cn/article/psdsdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部