C++語言-09-多任務

来源:http://www.cnblogs.com/theDesertIslandOutOfTheWorld/archive/2016/03/04/5241161.html
-Advertisement-
Play Games

闡述C++中多任務處理的相關概念


概述

  • 概念
    • 電腦同時運行多個程式的能力,多任務處理的方法是:運行第一個程式的一段代碼,保存工作環境;再運行第二個程式的一段代碼,保存工作環境;……恢復第一個程式的工作環境,執行第一個程式的下一段代碼……程式的局部性原理,是多任務處理最重要的基礎。
  • 多任務處理的類型
    • 基於進程的多任務處理
      • 程式之間的併發執行,由操作系統完成調度任務
    • 基於線程的多任務處理
      • 程式內部的併發執行,用戶(系統的用戶)可以調度任務
  • 關於
    • 若你想瞭解更多關於多任務處理的知識,如:任務調度,同步非同步等,請閱讀《電腦操作系統》一書。

多線程

  • 多線程編程
    • C++ 中的多線程編程是基於 POSIX(Portable Operating System Interface Of UNIX) Threads 或 Pthreads 提供的 API
    • 註意
      • 線程可以理解為輕量級的進程,一個進程中的資源被所有的子線程共用,線程之間是同等的
  • 線程操作
    • 創建線程

      int pthread_create(pthread_t * __restrict, const pthread_attr_t * __restrict,
      void *(*)(void *), void * __restrict);
      • 第一個參數:一個不透明的、唯一的標識符,用於表示常式返回的新線程
      • 第二個參數:一個不透明的屬性對象,可以被用來設置線程屬性。可以指定線程屬性對象,也可以使用預設值 NULL
      • 第三個參數:C++ 常式,一旦線程被創建就會執行
      • 第四個參數:一個可能傳遞給第三個參數(C++ 常式)的參數。必須通過把引用作為指針強制轉換為 void 類型進行傳遞。如果沒有傳遞參數,則使用 NULL。可以接受任何類型的參數,因為類型是 void *
    • 終止線程
      • 隱式終止
        • 在 main 函數終止時,未顯示終止的線程會自動終止
      • 顯示終止
        • 使用 pthread_exit 函數終止

          void pthread_exit(void *)
    • 連接和分離線程
      • 連接(實現線程間同步的一種方式)

        int pthread_join(pthread_t , void **)
        • 創建線程時,需要明確指定線程是否可連接。可移動設備中,並不是所有創建的線程預設都是可連接的。為了明確指定創建一個線程的連接性和分離性,創建一個線程可分為以下四個步驟:
          • 聲明一個pthread_attr_t數據類型的pthread屬性變數
          • 使用pthread_init()初始化屬性變數
          • 使用pthread_attr_setdetachstate()設置屬性為分離狀態
          • 當使用完成後,使用pthread_attr_destroy()釋放屬性用到的資源
        • pthread_join()將掛起調用線程的執行直到目標線程終止,除非目標線程已經終止了
      • 分離

        int pthread_detach(pthread_t)
        • 通常不建議調用 pthread_detach() 去分離一個線程,只需要在創建線程的時候,指定線程為可分離即可

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文內容來源:http://blog.privatenode.in/torifying-scrapy-project-on-ubuntu/ 在使用Scrapy的時候,一旦進行高頻率的爬取就容易被封IP,此時可以通過使用TOR來進行匿名爬取,同時要安裝Polipo代理伺服器 註意:要進行下麵的操作的前...
  • python web 部署 web開發中,各種語言爭奇鬥艷,web的部署方面,卻沒有太多的方式。簡單而已,大概都是 nginx 做前端代理,中間 webservice 調用程式腳本。大概方式:nginx + webservice + script nginx 不用多說,一個高性能的web伺服器。通常
  • 一、需求背景 1. 需求:spring MVC框架controller間跳轉,需重定向。有幾種情況:不帶參數跳轉,帶參數拼接url形式跳轉,帶參數不拼接參數跳轉,頁面也能顯示。 @RequestMapping(value = "/activityType", method = RequestMeth
  • 原文出處: xieyu_zy 在C、C++中有很多排序演算法,但是通常排序演算法不得不讓程式員在寫代碼的過程中陷入對底層很多指針和位置的理解,java不希望這樣,所以排序大多可以由java幫你做掉,例如,你要對一個數組排序,就通過:Collections.sort(list)那麼這個list就被排序了,
  • 裝飾器模式,可以動態地添加修改類的功能。 一個類提供了一項功能,如果要修改並添加額外的功能,傳統的編程模式需要寫一個子類繼承它,並重新實現類的方法。使用裝飾器模式,僅需要在運行時添加一個裝飾器對象即可實現,可以實現最大的靈活性。 DrawDecorator.php <?php namespace B
  • 分支結構 1.if後面可以不加{},但是不建議,容易產生誤解2.寫程式的時候先防屌絲測試,再寫邏輯,否則會出錯3.if:一條分支 if else:兩條分支 if...else if...:多條分支(結尾可以不加else)4.註意大括弧5.switch-case(與else if比較):(1).只能對
  • 前言:django1.8版本出現這種問題,關於標題不好命令,直接看正文問題描述! 問題描述: 在已經生成了models.py中表的情況下,更改了modes.py中的表,但是syncdb不起作用報錯。於是我用了個死方法,登錄MySQl手動把表刪了,也刪了應用中migrations文件夾,然後再進行 m
  • Java8讀文件僅需一行代碼 此方法確保了當讀入文件的所有位元組內容時,文件屬性是關閉的,否則就會出現IO異常或其它的未檢查異常。這意味著在讀文件到最後的塊內容後,無需關閉文件。要註意,此方法不適合讀取很大的文件,因為可能存在記憶體空間不足的問題。開發者還應該明確規定文件的字元編碼,以避免任異常或解析錯
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...