首页编程c 线程,C语言怎么写线程代码

c 线程,C语言怎么写线程代码

编程之家2023-11-03105次浏览

大家好,今天我将为大家揭秘c 线程和C语言怎么写线程代码的奥秘,希望我的分享能给你带来新的启发和知识。

c 线程,C语言怎么写线程代码

c++ 多线程与c多线程有什么区别

所有数据结构的生存期,以及对这些数据结构的access,都用这一根逻辑线程。不需要考虑数据结构的race。把任何耗时的操作都给其他线程(IO线程、定时器线程,DB线程等)做,做完之后向事件队列(多线程安全的队列,其他线程是生产者,逻辑线程是消费者)丢事件。

多线程逻辑设计的思路:

所有数据结构的生存期,以及对这些数据结构的access,不一定在一根线程。需要考虑数据结构的race。网络事件、定时器事件唤醒工作线程(一般通过iocp或者epoll来唤醒)执行所有工作,一般不需要交换到其他线程。

很显然,单线程逻辑多了一层事件队列交换,会增加延迟,以及所有的逻辑都在一根线程上跑,逻辑被阻塞也会带来延迟。其实吞吐量对于rpc来说,是个宏观的概念,尽可能快地消费网络消息就会提升吞吐量。对于高并发的程序,是无法忍受单线程逻辑的

c语言实现多线程

目录:

Linux操作系统,C语言实现多线程

Windows操作系统,C语言实现多线程

c 线程,C语言怎么写线程代码

Windows下的多线程(不带停止)

Linux操作系统,C语言实现多线程:

#include<stdio.h>

#include<stdlib.h>

#include<pthread.h>

void*ThreadOne(void*threadArg)

{

c 线程,C语言怎么写线程代码

printf("线程开始啦,参数是:%s\n",(char*)threadArg);

returnNULL;

}

intmain(void)

{

pthread_tThreadID;/*记录线程标识符*/

void*waitingResult;/*等待线程退出的等待结果*/

interrorCode;/*记录线程的错误代码*/

char*aMessage="这是线程的参数";

/*创建并启动线程ThreadOne。若返回值非零,则线程创建失败*/

errorCode=pthread_create(&ThreadID,NULL,ThreadOne,aMessage);

if(errorCode!=0)

{

printf("线程ThreadOne创建失败。错误代码:%d\n",errorCode);

returnEXIT_FAILURE;

}

/*等待线程标识符为的ThreadID的线程结束*/

errorCode=pthread_join(ThreadID,&waitingResult);

if(errorCode!=0)

{

printf("等待线程退出等待失败。错误代码:%d\n",errorCode);

returnEXIT_FAILURE;

}

printf("线程的返回值是%p\n",waitingResult);

returnEXIT_SUCCESS;

}Windows操作系统,C语言实现多线程:

#include<stdio.h>

#include<windows.h>

DWORDAPIENTRYThreadOne(LPVOIDthreadArg)

{

printf("线程开始啦,参数是:%s\n",(char*)threadArg);

return0;

}

intmain(void)

{

HANDLEhThread;/*记录线程句柄*/

DWORDThreadID;/*记录线程ID号*/

DWORDwaitingResult;/*等待线程退出的等待结果*/

DWORDthreadExitCode;/*记录线程的返回值*/

char*aMessage="这是线程的参数";

/*创建并启动线程ThreadOne,返回值为线程句柄,赋值给hThread*/

hThread=CreateThread(NULL,0L,ThreadOne,(LPVOID)aMessage,0L,&ThreadID);

if(hThread==NULL)

{

printf("线程ThreadOne创建失败。错误代码:%lu\n",GetLastError());

returnEXIT_FAILURE;

}

/*等待线程句柄为的hThread线程结束*/

waitingResult=WaitForSingleObject(hThread,INFINITE);

if(waitingResult==WAIT_FAILED)

{

printf("等待线程退出等待失败。错误代码:%lu\n",GetLastError());

returnEXIT_FAILURE;

}

if(GetExitCodeThread(hThread,&threadExitCode))

printf("线程的返回值是%lu\n",threadExitCode);

else

printf("获取线程的返回值获取失败。错误代码:%lu\n",GetLastError());

returnEXIT_SUCCESS;

}Windows下的多线程:(不带停止)

#include<stdio.h>

#include<windows.h>

DWORDWINAPIduoxianchen(LPVOIDlpParam);

intmain(intargc,char*argv[])

{

intnum=0;

CreateThread(NULL,NULL,duoxianchen,&num,NULL,NULL);

while(1)

{

num++;

printf("主线程!%05d\n",nu***eep(40);

}

return0;

}

DWORDWINAPIduoxianchen(LPVOIDlpParam)

{

int*a=lpParam;

while(1)

{

++*a;

printf("副线程!%05d0x%p\n",*a,a);

Sleep(80);

}

return0;

}

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语言怎么创建线程和使用

1、添加线程相关的头文件:#include<pthread.h>

2、线程创建函数是pthread_create()函数,该函数的原型为:

intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);

3、线程退出函数是pthread_exit()函数,该函数的原型为:

voidpthread_exit(void*retval);

创建线程的示例程序如下:

/*

**程序说明:创建线程函数pthread_create()函数的使用。

*/

#include<stdio.h>

#include<pthread.h>

#include<unistd.h>

#include<stdlib.h>

#include<string.h>

//打印标识符的函数

voidprint_ids(constchar*str)

{

pid_tpid;//进程标识符

pthread_ttid;//线程标识符

pid=getpid();//获得进程号

tid=pthread_self();//获得线程号

printf("%spid:%utid:%u(0x%x)\n",

str,(unsignedint)pid,(unsignedint)tid,(unsignedint)tid);//打印进程号和线程号

}

//线程函数

void*pthread_func(void*arg)

{

print_ids("newthread:");//打印新建线程号

return((void*)0);

}

//主函数

intmain()

{

interr;

pthread_tntid;//线程号

err=pthread_create(&ntid,NULL,pthread_func,NULL);//创建一个线程

if(err!=0)

{

printf("createthreadfailed:%s\n",strerror(err));

exit(-1);

}

print_ids("mainthread:");//打印主线程号

sleep(2);

return0;

}

OK,关于c 线程和C语言怎么写线程代码的内容到此结束了,希望对大家有所帮助。

银川网站建设 银川网站建设公司哪家好ip租用 ip地址租用周期