linux - 多線程總結1

来源:http://www.cnblogs.com/jinfei/archive/2016/08/19/5787735.html
-Advertisement-
Play Games

參考:www.cnblogs.com/forstudy/archive/2012/04/05/2433853.html 一 進程與線程 進程: 系統中程式執行和資源分配的基本單位 每個進程有自己的數據段、代碼段和堆棧段 在進行切換時需要有比較複雜的上下文切換 線程: 線程有獨立的棧段/errno/線 ...


參考:www.cnblogs.com/forstudy/archive/2012/04/05/2433853.html

 

一 進程與線程

  進程:   系統中程式執行和資源分配的基本單位   每個進程有自己的數據段、代碼段和堆棧段   在進行切換時需要有比較複雜的上下文切換   線程:        線程有獨立的棧段/errno/線程ID/信號掩碼        線程共用當前工作目錄/代碼段/數據段/描述字/信號處理/用戶ID/組ID   上下文切換開銷, 比創建進程小很多   處理器調度的最小單元,也稱為輕量級進程 二 線程相關的函數   頭文件:#include <pthread.h>   1. pthread_t pthread_self(void);   2. int pthread_equal(pthread_t tid1 , pthread_t tid2);   3. 創建線程   •調用該線程函數的入口點   •使用函數pthread_create(),線程創建後,就開始運行相關的線程函數 4. 退出線程   •線上程函數運行完後,該線程也就退出了   •或使用函數pthread_exit(),這是線程的主動行為   •不能使用exit() 5.等待線程

  •由於一個進程中的多個線程是共用數據段的,通常線上程退出之後,退出線程所占用的資源並不會隨著線程的終止而得到釋放

  •pthread_join()函數

    類似進程的wait()/waitpid()函數,用於將當前線程掛起來等待線程的結束     是一個線程阻塞的函數,調用它的線程一直等待到被等待的線程結束為止     函數返回時,被等待線程的資源就被收回

6. 取消線程   •在別的線程中要終止另一個線程   •pthread_cancel()函數   •被取消的線程可以設置自己的取消狀態     –被取消的線程接收到另一個線程的取消請求之後,是接受還是忽略這個請求     –如果接受,是立刻進行終止操作還是等待某個函數的調用等

7.互斥鎖   互斥鎖初始化:pthread_mutex_init()   互斥鎖上鎖:pthread_mutex_lock()   互斥鎖判斷上鎖:pthread_mutex_trylock()   互斥鎖解鎖:pthread_mutex_unlock()   消除互斥鎖:pthread_mutex_destroy()

8.信號量   sem_init() 創建一個信號量,並初始化它   sem_wait()和sem_trywait(): P操作,在信號量大於零時將信號量的值減一     •區別: 若信號量小於零時,sem_wait()將會阻塞線程,sem_trywait()則會立即返回   sem_post(): V操作,將信號量的值加一同時發出信號來喚醒等待的線程   sem_getvalue(): 得到信號量的值   sem_destroy(): 刪除信號量

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

-Advertisement-
Play Games
更多相關文章
  • 昨天,有個朋友對公司內部使用的一個MySQL實例開啟binlog,但是在啟動的過程中失敗了(他也沒提,為何會失敗),在啟動失敗後,他刪除了ibdata1和ib_logfile,後來,能正常啟動了,但所有的表通過show tables能看到,但是select的過程中卻報“Table doesn't e ...
  • 一:什麼是資料庫設計? 資料庫設計就是將資料庫中的數據實體以及這些數據實體之間的關係,進行規範和結構化的過程. 二:為什麼要實施資料庫設計? 1:良好的資料庫設計可以有效的解決數據冗餘的問題 2:效率高 3:便於進一步擴展 4:使得應用程式開發變得容易 三:設計資料庫的步驟 第一步 需求分析: 分析 ...
  • 這篇文章主要從 SQLite 資料庫的使用入手,介紹如何合理、高效、便捷的將這個桌面資料庫和 App 全面結合。避免 App 開發過程中可能遇到的坑,也提供一些在開發過程中通過大量實踐和數據對比後總結出的一些參數設置。整篇文章將以一個個具體的技術點作為講解單元,從 SQLite 資料庫生命周期起始講... ...
  • 本文針對 Python 操作 MySQL 主要使用的兩種方式講解: 原生模塊 pymsql ORM框架 SQLAchemy 本章內容: pymsql 執行 sql 增\刪\改\查 語句 pymsql 獲取查詢內容、獲取自增 ID pymsql 游標 pymsql 更改 fetch 數據類型 pyms... ...
  • Docker提供了輕量級的虛擬化,它幾乎沒有任何額外開銷。 提供了一個從開發到上線均一致的環境。 開發效率:一是我們想讓開發環境儘量貼近生產環境 二是我們想快速搭建開發環境 基於docker研發小組 qq群:108636195 概要: 1、只在資料庫初始化與資料庫遷移使用,普通迭代還是走提交增量腳本 ...
  • 概述 MongoDB 是一款跨平臺、面向文檔的資料庫。用它創建的資料庫可以實現高性能、高可用性,並且能夠輕鬆擴展。MongoDB 的運行方式主要基於兩個概念:集合(collection)與文檔(document)。 資料庫 資料庫是集合的實際容器。每一資料庫都在文件系統中有自己的一組文件。一個 Mo ...
  • 第一篇:屌炸天實戰 MySQL 系列教程(一) 生產標準線上環境安裝配置案例及棘手問題解決 第二篇:屌炸天實戰 MySQL 系列教程(二) 史上最屌、你不知道的資料庫操作 第三篇:屌炸天實戰 MySQL 系列教程(三)你不知道的 視圖、觸發器、存儲過程、函數、事物、索引、語句 第四篇:屌炸天實戰 M ...
  • 對makefile文件的要點作了總結,包括變數、表達式、函數、規則等方面,並介紹了make命令的相關用法。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...