多執行緒之pthread_create建立執行緒
pthreads定義了一套C程式語言型別、函式、與常量。以pthread.h和一個執行緒庫實現。
資料型別:
pthread_t:執行緒控制代碼
pthread_attr_t:執行緒屬性
執行緒操作函式:
pthread_create():建立一個執行緒
pthread_exit():終止當前執行緒
pthread_cancel():中斷另外一個執行緒的執行
pthread_join():阻塞當前的執行緒,直到另外一個執行緒執行結束
pthread_attr_init():初始化執行緒的屬性
pthread_attr_setdetachstate():設定脫離狀態的屬性
pthread_attr_getdetachstate():
pthread_attr_destroy():刪除執行緒的屬性
pthread_kill():向執行緒傳送一個訊號
.....
建立執行緒:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_rtn) (void*),void *arg);
*thread:執行緒id (指向執行緒識別符號的指標)
*attr:執行緒屬性(通常為空)
*start_rtn:執行緒要執行的函式(執行緒執行函式的起始地址)
*arg:start_rtn的引數
返回值為零才算成功,其它表示錯誤
編譯時需要加上 -lpthread庫
示例一:
#include <stdio.h>
#include <pthread.h>
void *pthread_1(void) //執行緒1執行的函式
{
inti;
for(i=1; i < 5; i++){
printf("pthread1.\n");
sleep(1);
}
return (void *)0;
}
void *pthread_2(void) //執行緒2
{
inti;
for(i=1;i < 5; i++){
printf("pthread2.\n");
sleep(1);
}
return (void *)0;
}
int main(int argc, char argv[])
{
intret = 0;
pthread_tpthid1, pthid2; //執行緒的id
ret= pthread_create(&pthid1,NULL, (void *)pthread_1, NULL);
if(ret) // 非0則建立失敗
{
perror("createthread 1 failed.\n");
return1;
}
ret= pthread_create(&pthid2, NULL, (void *)pthread_2, NULL);
if(ret)
{
perror("createthread 2 failed.\n");
return1;
}
pthread_join(pthid1,NULL); //等待pthid1,否則不會等待,繼續往下執行
pthread_join(pthid2,NULL); //如無,遇到下面的return會結束程序
return0;
}
示例二:傳遞引數,初始化
/*
*pthread_init.c
*
* Created on: Jan 20, 2013
* Author: [email protected]
*/
#include <stdio.h>
#include <pthread.h>
void *create(void *arg)
{
int *num;
num = (int*)arg;
printf("theinput number is: %d.\n", *num);
return(void *)0;
}
int main(int argc, char argv[])
{
intret;
intt;
printf("Inputone number:");
scanf("%d",&t);
int*attr = &t;
pthread_tpthid;
ret= pthread_create(&pthid, NULL, (void *)create, (void *)attr);
if(ret)
{
perror("createthread failed.\n");
return1;
}
pthread_join(pthid,NULL);
return0;
}
示例三:共享資料
/*
*pthread_share.c
*
* Created on: Jan 20, 2013
* Author: [email protected]
*/
#include <stdio.h>
#include <pthread.h>
static int i = 3;
void *pthread_1(void)
{
printf("thread1, i is: %d.\n", i);
return(void *)0;
}
void *pthread_2(void)
{
printf("thread2, i is: %d.\n", i);
return(void *)0;
}
int main(int argc, char argv[])
{
intret = 0;
inti = 5;
pthread_tpthid1, pthid2;
printf("mainthread, i is: %d.\n", i);
ret= pthread_create(&pthid1, NULL, (void *)pthread_1, NULL);
if(ret)
{
printf("createthread 1 failed.\n");
return1;
}
ret= pthread_create(&pthid2, NULL, (void *)pthread_2, NULL);
if(ret)
{
printf("createthread 2 failed.\n");
return1;
}
pthread_join(pthid1,NULL);
pthread_join(pthid2,NULL);
return0;
}
此段程式之中兩個執行緒是對等的,不存在先後順序;
i 為全域性變數,main函式內部為區域性的變數。
http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html
http://baike.baidu.com/view/974776.htm
相關推薦
多執行緒之pthread_create建立執行緒
pthreads定義了一套C程式語言型別、函式、與常量。以pthread.h和一個執行緒庫實現。 資料型別: pthread_t:執行緒控制代碼 pthread_attr_t:執行緒屬性 執行緒操作函式: pthread_create():建立一個執行緒 pthread_e
jvm之java建立執行緒導致記憶體異常
1。以下執行緒啟動,請注意儲存當前工作,因為jav的執行緒是對映到作業系統的核心執行緒上,下面程式碼執行,容易導致作業系統假死 會導致部署程式碼的缺失,執行以上程式會導致如下結果如: 請強制結束以下程序。 分析如下: java的執行緒執行是對映到作業系統的核心執行緒上的。
java多執行緒:2 建立執行緒
如何建立一個多執行緒: Java提供了java.lang.Thread類,這就是執行緒的定義類,包含了:執行緒的優先順序,執行緒id、執行緒狀態等執行緒的基本資訊。 通過Thread類的說明,可以知道建立執行緒的兩種方式:1 extends Thread類,2 implements
多執行緒(一):建立執行緒的幾種方法
概括來說就是兩種:1、繼承Thread類,重寫run方法,然後start。不推薦這種,因為java的單繼承特性。 2、Thread類的建構函式中可以接受Runnable任務,所以只要是Runnable例項就可以作為引數給Thread 一般有兩種建立Runnable例項的方法(1)實現Runn
Java多執行緒之interrupt()和執行緒終止方式
1. interrupt()說明 在介紹終止執行緒的方式之前,有必要先對interrupt()進行了解。 關於interrupt(),java的djk文件描述如下:http://docs.oracle.com/javase/7/docs/api/ Interrupts this thread
C# 多執行緒之List的執行緒安全問題
網上關於List的執行緒安全問題將的很少,所以自己實驗了一把,發現確實是執行緒不安全的.所以當你在進行多執行緒程式設計中使用了共享的List集合,必須對其進行執行緒安全處理. List的Add方法是執行緒不安全的,List的原始碼中的Add方法,使用了每次噹噹前的元素達到上限,通過建立一個新的陣列例項,並給
MFC筆記(四)——多執行緒程式設計2:建立執行緒
2.1 CreateThread() (1)函式原型:建立執行緒 HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_STA
java多執行緒之callable+Executor執行緒池例項
package main.java; import java.sql.Time; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.con
多執行緒之使用者級執行緒切換隨筆
執行緒及切換執行緒:比程序更輕的動態執行序列,同一程序中的多個執行緒可以共享資源(記憶體),故執行緒間的切換相比程序更加快速、方便。執行緒的切換:是指令之間的切換,從一段執行序列(程式)切換到另一段執行序列(程式),而記憶體對映表不變;即PC的切換,執行緒的切換也是程序切換的
Android Studio 多執行緒之 ExecutorService 迴圈執行問題
常見 api 的使用 使用過程中,值得注意的是,該執行緒只執行一次,如需迴圈執行,需要在本次執行緒任務執行結束之後重新啟動執行緒任務。 舉個例子 我最近做的專案——通過 USB OTG 從嵌入式裝置中不斷獲取資料。我將獲取資料的過程放進了 ExecutorService 所管理的
pthread_create()建立執行緒最大個數
執行緒應用程式最常見導致建立執行緒失敗的原因是執行緒棧大小的設定。建立一個新的執行緒,預設情況下系統為執行緒棧預留了2MB的定址空間。執行緒棧起始於程序虛擬 記憶體的高階地址,並向虛擬記憶體底端地址方向擴充套件。取決於執行緒本身的大小以及其它執行緒記憶體分配的情況,程序虛
JAVA多執行緒之當一個執行緒在執行死迴圈時會影響另外一個執行緒嗎?
一,問題描述 假設有兩個執行緒在併發執行,一個執行緒執行的程式碼中含有一個死迴圈如:while(true)....當該執行緒在執行while(true)中程式碼時,另一個執行緒會有機會執行嗎? 二,示例程式碼(程式碼來源於網際網路) 1 public class Service { 2
JAVA多執行緒之兩個執行緒同時寫一個檔案
1.多執行緒 執行緒是程式執行流的最小單元。是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒,同一程序中的多個執行緒之間可以併發執行
C++用pthread_create()建立執行緒時需要注意的問題
pthread_create()是Linux中建立執行緒的一種方式。 #include<pthread.h> int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*star
java多執行緒之Runnable同時執行同一資源例項
這是個賣票例項,採用多執行緒,模擬不同視窗來賣票,票數是共同資源。 piao.java package tong; public class piao implements Runnable { private static int count = 10;
Java多執行緒之"事件分發執行緒"----Event Dispatch Thread
當執行GUI小程式(Applet)或應用程式(Application)時,main()方法中的程式碼會建立一個GUI並設定事件控制代碼.當呼叫Frame,Dialog,Window的setVisible(true)或瀏覽器顯示Applet時,我們就是在和GUI互動. 問題
Win32多執行緒之等待一個執行緒的結束(WaitForSingleObject)
由於執行緒停工是作業系統的責任,當然作業系統也有責任讓其他執行緒知道某個執行緒停工了。 Win32提供了一個名為WaitForSingleObject()的函式。他的第一個引數是個核心物件(如執行緒)的handle,為了方便討論,我把即將等待的執行緒稱為執行緒#1
網路程式設計:服務端處理多個客戶端----多執行緒實現、建立執行緒特有資料.
重點集中在用多執行緒實現,建立執行緒特有資料,不會發生資料寫入衝突。實現的功能很簡單,客戶端連線成功後,輸入一個整數,服務端返回它的二進位制形式。客戶端輸入0,則主動退出。三個檔案: duoxianc.c ,主檔案binarykey.c,執行緒執行函式及特有資料建立clien
使用pthread_create建立大量執行緒時,建立執行緒失敗,Resource temporarily unavailable的解決辦法
今天在一個測試程式中使用pthread_create建立了大量執行緒,但是如果執行緒數量增加到400後,就會出現執行緒建立失敗,perror打印出的錯誤原因是:Resource temporarily unavailable。 在網上查了下,原
Java多執行緒之捕獲子執行緒中的異常
在某些場景下,我們經常需要使用多執行緒來執行任務提高效能,但是我們知道正常的主執行緒是無法處理子執行緒的異常的,一旦出現異常就會傳播到控制檯。這個時候我們需要線上程裡面處理異常怎麼辦呢,我們可以使用E