c語言可以多線程代碼怎麼寫,c語言是多線程語言嗎

本文目錄一覽:

C語言怎麼寫線程代碼

通常使用CreateThread函數來創建新的線程.(Unix下使用pthread_create函數)

首先指出,線程與線程之間,是並列關係,不會存在”父子線程”的概念.

在Windows平台下,CreateThread函數包含在 Windows.h 文件內,包含此文件即可正常使用.

以下為CreateThread函數的聲明:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向安全性屬性描述結構體的

//指針,通常可以忽略的.

SIZE_T dwStackSize,//指定新線程初始的棧大小,若不關心,可以用0填充,來要求使用

//默認值

LPTHREAD_START_ROUTINE lpStartAddress,//用來充當線程的函數的指針.

LPVOID lpParameter,//要傳遞給函數的參數,這個值本身就是那個參數,而不是參數的地址

DWORD dwCreationFlags,//創建的方式,0表示正常,創建後立即開始運行

LPDWORD lpThreadId//用來接受函數反饋的線程ID的指針.

);

用來充當新的線程的函數格式:

DWORD WINAPI ThreadProc(LPVOID);

CreateThread函數若成功了,返回新線程的句柄,若失敗了,則返回NULL.

若用CREATE_SUSPENDED填充dwCreation Flags則創建的線程先掛起來,並不直接開始運行,要用ResumeThread函數恢複線程,才能繼續運行.

c語言如何編寫一個簡單的多線程程序?

這是一個多線程例子,裡面只有兩個線程,是生產者/消費者模式,已編譯通過,注釋很詳細,

如下:

/* 以生產者和消費者模型問題來闡述Linux線程的控制和通信你

生產者線程將生產的產品送入緩衝區,消費者線程則從中取出產品。

緩衝區有N個,是一個環形的緩衝池。

*/

#include stdio.h

#include pthread.h

#define BUFFER_SIZE 16

struct prodcons

{

int buffer[BUFFER_SIZE];/*實際存放數據的數組*/

pthread_mutex_t lock;/*互斥體lock,用於對緩衝區的互斥操作*/

int readpos,writepos; /*讀寫指針*/

pthread_cond_t notempty;/*緩衝區非空的條件變量*/

pthread_cond_t notfull;/*緩衝區未滿 的條件變量*/

};

/*初始化緩衝區*/

void pthread_init( struct prodcons *p)

{

pthread_mutex_init(p-lock,NULL);

pthread_cond_init(p-notempty,NULL);

pthread_cond_init(p-notfull,NULL);

p-readpos = 0;

p-writepos = 0;

}

/*將產品放入緩衝區,這裡是存入一個整數*/

void put(struct prodcons *p,int data)

{

pthread_mutex_lock(p-lock);

/*等待緩衝區未滿*/

if((p-writepos +1)%BUFFER_SIZE ==p-readpos)

{

pthread_cond_wait(p-notfull,p-lock);

}

p-buffer[p-writepos] =data;

p-writepos++;

if(p-writepos = BUFFER_SIZE)

p-writepos = 0;

pthread_cond_signal(p-notempty);

pthread_mutex_unlock(p-lock);

}

/*從緩衝區取出整數*/

int get(struct prodcons *p)

{

int data;

pthread_mutex_lock(p-lock);

/*等待緩衝區非空*/

if(p-writepos == p-readpos)

{

pthread_cond_wait(p-notempty ,p-lock);//非空就設置條件變量notempty

}

/*讀書據,移動讀指針*/

data = p-buffer[p-readpos];

p-readpos++;

if(p-readpos == BUFFER_SIZE)

p-readpos = 0;

/*設置緩衝區未滿的條件變量*/

pthread_cond_signal(p-notfull);

pthread_mutex_unlock(p-lock);

return data;

}

/*測試:生產站線程將1 到1000的整數送入緩衝區,消費者線程從緩衝區中獲取整數,兩者都打印信息*/

#define OVER (-1)

struct prodcons buffer;

void *producer(void *data)

{

int n;

for( n=0;n1000;n++)

{

printf(“%d ——\n”,n);

put(buffer,n);

}

put(buffer,OVER);

return NULL;

}

void *consumer(void *data)

{

int d;

while(1)

{

d = get(buffer);

if(d == OVER)

break;

else

printf(“—–%d\n”,d);

}

return NULL;

}

int main()

{

pthread_t th_p,th_c;

void *retval;

pthread_init(buffer);

pthread_create(th_p,NULL,producer,0);

pthread_create(th_c,NULL,consumer,0);

/*等待兩個線程結束*/

pthread_join(th_p, retval);

pthread_join(th_c,retval);

return 0;

}

C語言如何實現多線程同時運行

1、點擊菜單欄的“Project”選項卡,下拉列表的最後一項“Project options…”是對當前工程的的屬性進行設置的。

2、選擇彈出對話框中的“Compiler”選項卡。

3、將其中的“Runtime Library”的選擇改為“Multithreaded (LIB)”。

4、將看到對話框最下面的文本框中發生了一些變化,新增了“-MT”選項,這與編譯器一開始所報的錯誤提示給出的解決方案一致。

5、頁面的設置完成後,再對該源碼進行編譯時,就能愉快地看到編譯完全成功。

C語言怎樣實現多線程?

首先你要有控制蛇移動方向的全局變量(定義在main以外因為線程函數也要調用它,每次鍵盤輸入都會修改它的值), 比如 char direction ‘a’ ==左 ‘w’ == 右 ‘d’==上 ‘s’ == 下,然後你在移動時應該是在while裡面操作的吧,你每移動一步前都讀一下direction這個變量的數值然後再控制移動方向(注意s這個鍵可以忽略因為不會倒着走) 然後你可以用pthread.h這個庫 例子是 pthread t;// 定義一個線程 pthread_create(t, null, listen_keyboard_input, null);//建立線程執行listen_keyboard_input這個函數 這個線程執行的函數 void listen_keyboard_input(){ while(應該通過某個信號來退出這個循環,從而表示遊戲結束){ direction =getchar(); } } 但是這裡存在同步問題, 比如當這個線程的getchar()在給direction輔助的同時,你控制貪吃蛇移動的線程正在調用 direction的值來判斷下一個移動方向,這就會出問題,所以要加一個鎖,叫 mutex lock;這個也定義成全局變量可以使各線程共享。 pthread_mutex_t mutex; //定義一個鎖 pthread_mutex_init(mutex, null, null);//初始化 然後把函數修改成 void listen_keyboard_input(){ while(應該通過某個信號來退出這個循環,從而表示遊戲結束){ pthread_mutex_lock(mutex); direction =getchar(); pthread_mutex_unlock(mutex); } } 另外一個控制貪吃蛇移動的時候也要加鎖 while(…..){ char c; pthread_mutex_lock(mutex); c = direction; pthread_mutex_unlock(mutex); switch(c){ ……………. } …………………………….. } 這樣就好了 注意你的控制貪吃蛇移動的部分也必須要放在另外一個pthread 裡面執行,如果放在主線程, 主線程會一直等listen_keyboard_input而什麼事都不會做 你把這兩個線程用 pthread_create 創建完成後 用 t1.join(); t2.join(); 就可以使這兩個線程並發執行了 如果你用的是linux 來編譯的,你再輸入gcc 指令後加上 -lpthread 就可以了 還有什麼不懂的你可以多找找 pthread 類的例子

用C語言在windows或者Linux上面,編寫一個多線程程序

#includestdio.h

#includestdlib.h

#includewindows.h

DWORD WINAPI ThreadProc(LPVOID lpParam)

{

int *pt=(int*)lpParam;

printf(“I am tread %d\r\n”,*pt);

}

int main()

{

const int Count=4;

int datas[Count];

DWORD dwThreadId[Count];

HANDLE hThread[Count];

int i;

for(i=0;iCount;i++)

{

datas[i]=i+1;

hThread[i]=CreateThread(NULL,0,ThreadProc,datas[i],0,dwThreadId[i]);

}

WaitForMultipleObjects(Count,hThread,TRUE,INFINITE);

for(i=0;iCount;i++)

{

CloseHandle(hThread[i]);

}

system(“PAUSE”);

return EXIT_SUCCESS;

}

c語言中怎樣創建多線程?

/*這是我寫的最簡單的多線程程序,看懂不?*/

#include windows.h

#include stdio.h

//#include strsafe.h

DWORD WINAPI ThreadProc1( LPVOID lpParam )

{

int i=0,j=0;

while(1)

{

printf(“hello,this thread 1 …\n”);

//延時

for(i=0;i200000000;i++)

{

;

}

}

}

DWORD WINAPI ThreadProc2( LPVOID lpParam )

{

int i=0,j=0;

while(1)

{

printf(“hello,this thread 2 …\n”);

//延時

for(i=0;i200000000;i++)

{

;

}

}

}

void main()

{

int i=0;

//創建線程1

CreateThread(

NULL, // default security attributes

0, // use default stack size

ThreadProc1, // thread function

NULL, // argument to thread function

0, // use default creation flags

NULL); // returns the thread identifier

//創建線程2

CreateThread(

NULL, // default security attributes

0, // use default stack size

ThreadProc2, // thread function

NULL, // argument to thread function

0, // use default creation flags

NULL); // returns the thread identifier

//讓主線程進入循環,主線程若退出,子線程1,2會被系統“殺死”

while(1)

{

printf(“hello,this thread 0 …\n”);

//延時

for(i=0;i200000000;i++)

{;}

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/156569.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 01:56
下一篇 2024-11-18 01:56

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29

發表回復

登錄後才能評論