• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            統(tǒng)計

            • 隨筆 - 50
            • 文章 - 42
            • 評論 - 147
            • 引用 - 0

            留言簿(6)

            隨筆分類

            文章分類

            Link

            搜索

            •  

            積分與排名

            • 積分 - 165530
            • 排名 - 159

            最新評論

            閱讀排行榜

            評論排行榜

            Windows下 POSIX 線程編程

            1. POSIX 標準

                    POSIX是Portable Operating System Interface of Unix的縮寫。由IEEE(Institute of Electrical and Electronic Engineering)開發(fā),由ANSI和ISO標準化。
                    POSIX的誕生和Unix的發(fā)展是密不可分的,Unix于70年代誕生于Bell lab,并于80年代向美各大高校分發(fā)V7版的源碼以做研究。UC Berkeley在V7的基礎(chǔ)上開發(fā)了BSD Unix。后來很多商業(yè)廠家意識到Unix的價值也紛紛以Bell Lab的System V或BSD為基礎(chǔ)來開發(fā)自己的Unix,較著名的有Sun OS,AIX,VMS。由于各廠家對Unix的開發(fā)各自為政,造成了Unix的版本相當(dāng)混亂,給軟件的可移植性帶來很大困難,對Unix的發(fā)展極為不利。為結(jié)束這種局面,IEEE開發(fā)了POSIX,POSIX在源代碼級別上定義了一組最小的Unix(類Unix)操作系統(tǒng)接口。
                    POSIX 表示可移植操作系統(tǒng)接口(Portable Operating System Interface ,縮寫為 POSIX 是為了讀音更像 UNIX)。電氣和電子工程師協(xié)會(Institute of Electrical and Electronics Engineers,IEEE)最初開發(fā) POSIX 標準,是為了提高 UNIX 環(huán)境下應(yīng)用程序的可移植性。然而,POSIX 并不局限于 UNIX。許多其它的操作系統(tǒng),例如 DEC OpenVMS 和 Microsoft Windows NT,都支持 POSIX 標準,尤其是 IEEE Std. 1003.1-1990(1995 年修訂)或 POSIX.1,POSIX.1 提供了源代碼級別的 C 語言應(yīng)用編程接口(API)給操作系統(tǒng)的服務(wù)程序,例如讀寫文件。POSIX.1 已經(jīng)被國際標準化組織(International Standards Organization,ISO)所接受,被命名為 ISO/IEC 9945-1:1990 標準。
                    POSIX 現(xiàn)在已經(jīng)發(fā)展成為一個非常龐大的標準族,某些部分正處在開發(fā)過程中。表 1-1 給出了 POSIX 標準的幾個重要組成部分。POSIX 與 IEEE 1003 和 2003 家族的標準是可互換的。除 1003.1 之外,1003 和 2003 家族也包括在表中。

            表1:標準的重要組成部分
            1003.0
            管理 POSIX 開放式系統(tǒng)環(huán)境(OSE)。IEEE 在 1995 年通過了這項標準。 ISO 的版本是 ISO/IEC 14252:1996。
            1003.1
            被廣泛接受、用于源代碼級別的可移植性標準。1003.1 提供一個操作系統(tǒng)的 C 語言應(yīng)用編程接口(API)。IEEE 和 ISO 已經(jīng)在 1990 年通過了這個標準,IEEE 在 1995 年重新修訂了該標準。
            1003.1b
            一個用于實時編程的標準(以前的 P1003.4 或 POSIX.4)。這個標準在 1993 年被 IEEE 通過,被合并進 ISO/IEC 9945-1。
            1003.1c
            一個用于線程(在一個程序中當(dāng)前被執(zhí)行的代碼段)的標準。以前是 P1993.4 或 POSIX.4 的一部分,這個標準已經(jīng)在 1995 年被 IEEE 通過,歸入 ISO/IEC 9945-1:1996。
            1003.1g
            一個關(guān)于協(xié)議獨立接口的標準,該接口可以使一個應(yīng)用程序通過網(wǎng)絡(luò)與另一個應(yīng)用程序通訊。 1996 年,IEEE 通過了這個標準。
            1003.2
            一個應(yīng)用于 shell 和 工具軟件的標準,它們分別是操作系統(tǒng)所必須提供的命令處理器和工具程序。 1992 年 IEEE 通過了這個標準。ISO 也已經(jīng)通過了這個標準(ISO/IEC 9945-2:1993)。
            1003.2d
            改進的 1003.2 標準。
            1003.5
            一個相當(dāng)于 1003.1 的 Ada 語言的 API。在 1992 年,IEEE 通過了這個標準。并在 1997 年對其進行了修訂。ISO 也通過了該標準。
            1003.5b
            一個相當(dāng)于 1003.1b(實時擴展)的 Ada 語言的 API。IEEE 和 ISO 都已經(jīng)通過了這個標準。ISO 的標準是 ISO/IEC 14519:1999。
            1003.5c
            一個相當(dāng)于 1003.1q(協(xié)議獨立接口)的 Ada 語言的 API。在 1998 年, IEEE 通過了這個標準。ISO 也通過了這個標準。
            1003.9
            一個相當(dāng)于 1003.1 的 FORTRAN 語言的 API。在 1992 年,IEEE 通過了這個標準,并于 1997 年對其再次確認。ISO 也已經(jīng)通過了這個標準。
            1003.10
            一個應(yīng)用于超級計算應(yīng)用環(huán)境框架(Application Environment Profile,AEP)的標準。在 1995 年,IEEE 通過了這個標準。
            1003.13
            一個關(guān)于應(yīng)用環(huán)境框架的標準,主要針對使用 POSIX 接口的實時應(yīng)用程序。在 1998 年,IEEE 通過了這個標準。
            1003.22
            一個針對 POSIX 的關(guān)于安全性框架的指南。
            1003.23
            一個針對用戶組織的指南,主要是為了指導(dǎo)用戶開發(fā)和使用支持操作需求的開放式系統(tǒng)環(huán)境(OSE)框架
            2003
            針對指定和使用是否符合 POSIX 標準的測試方法,有關(guān)其定義、一般需求和指導(dǎo)方針的一個標準。在 1997 年,IEEE 通過了這個標準。
            2003.1
            這個標準規(guī)定了針對 1003.1 的 POSIX 測試方法的提供商要提供的一些條件。在 1992 年,IEEE 通過了這個標準。
            2003.2
            一個定義了被用來檢查與 IEEE 1003.2(shell 和 工具 API)是否符合的測試方法的標準。在 1996 年,IEEE 通過了這個標準。

                   除了 1003 和 2003 家族以外,還有幾個其它的 IEEE 標準,例如 1224 和 1228,它們也提供開發(fā)可移植應(yīng)用程序的 API。要想得到關(guān)于 IEEE 標準的最新信息,可以訪問 IEEE 標準的主頁,網(wǎng)址是 http://standards.ieee.org/。有關(guān) POSIX 標準的概述信息,請訪問 Web 站點 http://standards.ieee.org/reading/ieee/stad_public/description/posix/

            2. Liniux下的線程編程

                    Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。從上面的描述不難知道,POSIX線程接口是POSIX眾多標準中的一個(POSIX 1003.1-2001

                    編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時需要使用庫libpthread.a。順便說一下,Linux下pthread的實現(xiàn)是通過系統(tǒng)調(diào)用 clone() 來實現(xiàn)的。clone() 是Linux所特有的系統(tǒng)調(diào)用,它的使用方式類似fork,關(guān)于 clone() 的詳細情況,有興趣的讀者可以去查看有關(guān)文檔說明。

            下面是一個 POSIX 線程的簡單示例程序(thread1.c):

            #include <pthread.h>
            #include 
            <stdlib.h>
            #include 
            <unistd.h>
             
            void *thread_function(void *arg) {
              
            int i;
              
            for ( i=0; i<20; i++{
                printf(
            "Thread says hi! ");
                sleep(
            1);
              }

              
            return NULL;
            }

            int main(void{
              pthread_t mythread;
              
              
            if ( pthread_create( &mythread, NULL, thread_function, NULL) ) {
                printf(
            "error creating thread.");
                abort();
              }

              
            if ( pthread_join ( mythread, NULL ) ) {
                printf(
            "error joining thread.");
                abort();
              }

              exit(
            0);
            }

             要編譯這個程序,只需先將程序存為 thread1.c,然后輸入:

            $ gcc thread1.c -o thread1 -lpthread

            運行則輸入:

            $ ./thread1

            3. Windows下POSIX線程編程

                   Windows本身沒有提供對POSIX的支持。但有一個叫 POSIX Threads for Win32 的開源項目給出了一個功能比較完善的Windows下pthreads API的實現(xiàn)。目前的最新版本是Pthreads-w32 release 2.8.0 (2006-12-22)。

                   我沒有測試過這個最新版本,這里只給出2.7.0版的鏈接:ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe

                   關(guān)于該開源項目的詳細介紹見:http://sources.redhat.com/pthreads-win32/

            3.1 簡單使用

                   上面的exe文件是一個自解壓文件,解壓后,Pre-built.2目錄中有編譯所需要的頭文件(include子目錄)和庫文件(lib子目錄)。

                   一個簡單的測試程序(main.cpp):

            #include <stdio.h>
            #include 
            <pthread.h>
            #include 
            <assert.h>

            void* Function_t(void* Param)
            {
                printf(
            "I am a thread!  ");
                pthread_t myid 
            = pthread_self();
                printf(
            "thread ID=%d ", myid);
                
            return NULL;
            }


            int main()
            {
                pthread_t pid;
                pthread_attr_t attr;
                pthread_attr_init(
            &attr);
                pthread_attr_setscope(
            &attr, PTHREAD_SCOPE_PROCESS);
                pthread_attr_setdetachstate(
            &attr, PTHREAD_CREATE_DETACHED);
                pthread_create(
            &pid, &attr, Function_t, NULL);
                printf(
            "======================================== ");
                getchar();
                pthread_attr_destroy(
            &attr);
                
            return 1;
            }
             

            使用 cl.exe 編譯(不熟悉 cl.exe 的請參考:http://blog.csdn.net/liuyongjin1984/archive/2008/01/07/2029405.aspx 或者參見下面3.2部分):

            rem cl.bat

            》cl.exe main.cpp  
            //I"c:pthreads-w32-2-7-0-releasePre-built.2include"

            》link.exe 
            /out:main_cl.exe  main.obj  /LIBPATH:"c:pthreads-w32-2-7-0-releasePre-built.2lib"   pthreadVC2.lib

             3.2 使用VC++ 6.0或Visual Studio 2005來運行上面的程序

            關(guān)鍵有兩點:

            1. 是將頭文件(include子目錄)和庫文件(lib子目錄)中的內(nèi)容添加到VC++ 6.0或Visual Studio 2005開發(fā)環(huán)境對應(yīng)的include和lib目錄下。

            具體來說(以添加include目錄為例,添加lib目錄類似):

            圖1:VC++ 6.0(添加include目錄:工具--》選項--》目錄)

             

             

            圖2:Visual Studio 2005(添加include目錄:tools--》options)

             

             

            2. 指定link時要連接的庫的名稱(pthreadVC2.lib)

            圖3:VC++ 6.0(工程--》設(shè)置--》連接)

            圖4:Visual Studio 2005(project-->* property pages)

             

            4. 書籍推薦
            << POSIX Multithread Programming Primer >>: http://download.csdn.net/source/237125

            posted on 2009-03-17 23:58 pear_li 閱讀(1042) 評論(0)  編輯 收藏 引用 所屬分類: C++Linux/Unix

            久久久久成人精品无码| 久久亚洲AV成人出白浆无码国产| 国产精品视频久久久| 精品国产福利久久久| 大香网伊人久久综合网2020| 久久国产精品免费一区二区三区| 久久久精品视频免费观看| 久久频这里精品99香蕉久| 天堂久久天堂AV色综合| AA级片免费看视频久久| 中文字幕无码久久人妻| 狠狠狠色丁香婷婷综合久久五月| 久久高清一级毛片| 亚洲中文久久精品无码| 2020最新久久久视精品爱 | 色综合久久中文字幕综合网| 午夜天堂精品久久久久| 欧美日韩精品久久久久| 77777亚洲午夜久久多喷| 97视频久久久| 欧美性猛交xxxx免费看久久久| 99久久人妻无码精品系列| 中文字幕无码av激情不卡久久| 国产成人精品久久亚洲| 91精品国产高清久久久久久io| 2021国内久久精品| 香蕉久久久久久狠狠色| 国产精品欧美亚洲韩国日本久久| av无码久久久久不卡免费网站| 久久久这里有精品| 久久综合久久综合亚洲| 欧美日韩成人精品久久久免费看| 国产L精品国产亚洲区久久| 久久精品国产精品青草app| 久久人人爽人人爽人人片AV不| 久久福利资源国产精品999| 久久综合日本熟妇| 漂亮人妻被中出中文字幕久久| 天天影视色香欲综合久久| 久久久国产99久久国产一| 亚洲欧美日韩精品久久亚洲区 |