当前位置:首页 > 代码 > 正文

c多线程代码(多线程 c)

admin 发布:2022-12-19 16:33 129


本篇文章给大家谈谈c多线程代码,以及多线程 c对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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语言怎么写线程代码

通常使用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语言中怎样创建多线程?

/*这是我写的最简单的多线程程序,看懂不?*/

#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++)

{;}

}

}

关于c多线程代码和多线程 c的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签:

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/13241.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载