首页编程c 多线程编程(c语言多进程编程)

c 多线程编程(c语言多进程编程)

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

大家好,今天我将为大家揭秘c 多线程编程和c语言多进程编程的奥秘,希望我的分享能给你带来新的启发和知识。

c 多线程编程(c语言多进程编程)

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

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

多线程逻辑设计的思路:

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

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

c语言多进程编程

多进程这个词用得比较少,听过来有点不熟悉。你这个程序在linux下应该很容易实行,就是个进程间通信的问题,管道、消息队列、共享内存都可以,可以找找相关资料。昨天失言不好意思。

三个源文件分别为1.c、2.c、3.c一个头文件share.h。

c 多线程编程(c语言多进程编程)

share.h:

//共享的内存,两个数组

typedef struct{

int a[2];

int b[2];

int id;

c 多线程编程(c语言多进程编程)

}share_use;

1.c:

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include"share.h"

int main(){

void*shared_memory=(void*)0;

share_use*share_stuff;

int shmid;

shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//创建共享内存

if(shmid==-1){

fprintf(stderr,"共享内存创建失败!\n");

exit(1);

}

shared_memory= shmat(shmid,(void*)0,0);//让进程可以访问共享内存

if(shared_memory==(void*)-1){

fprintf(stderr,"启用共享内存失败!\n)";

exit(1);

}

printf("Memory attached at%X\n",(int)shared_memory);

share_stuff=(share_use*)shared_memory;

share_stuff->id=0;

share_stuff->a[0]=1;

share_stuff->a[1]=2;

while(1){

if(share_stuff->id)

exit(0);

sleep(10);

}

}

2.c:

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include"share.h"

int main(){

void*shared_memory=(void*)0;

share_use*share_stuff;

int shmid;

shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//创建共享内存

if(shmid==-1){

fprintf(stderr,"共享内存创建失败!\n");

exit(1);

}

shared_memory= shmat(shmid,(void*)0,0);//让进程可以访问共享内存

if(shared_memory==(void*)-1){

fprintf(stderr,"启用共享内存失败!\n");

exit(1);

}

printf("Memory attached at%X\n",(int)shared_memory);

share_stuff=(share_use*)shared_memory;

share_stuff->b[0]=share_stuff->a[0]*100;

share_stuff->b[1]=share_stuff->a[1]*100;

while(1)

{

if(share_stuff->id)

exit(0);

sleep(10);

}

}

3.c:

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include"share.h"

int main(){

void*shared_memory=(void*)0;

share_use*share_stuff;

int shmid;

shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//创建共享内存

if(shmid==-1){

fprintf(stderr,"共享内存创建失败!\n");

exit(1);

}

shared_memory= shmat(shmid,(void*)0,0);//让进程可以访问共享内存

if(shared_memory==(void*)-1){

fprintf(stderr,"启用共享内存失败!\n");

exit(1);

}

printf("Memory attached at%X\n",(int)shared_memory);

share_stuff=(share_use*)shared_memory;

printf("共享内存中有元素:%d,%d",share_stuff->b[0],share_stuff->b[1]);

share_stuff->id=1;

return 0;

}

linux或unix环境下编译

关于C++多线程编程教学

在Windows NT和Windows 9x中,多线程的编程实现需要调用一系列的API函数,如CreateThread、ResumeThread等,比较麻烦而且容易出错。我们使用Inprise公司的新一代RAD开发工具C++Builder,可以方便地实现多线程的编程。与老牌RAD工具Visual Basic和Delphi比,C++Builer不仅功能非常强大,而且它的编程语言是C++,对于系统开发语言是C的Windows系列操作系统,它具有其它编程语言无可比拟的优势。利用C++Builder提供的TThread对象,多线程的编程变得非常简便易用。那么,如何实现呢?且待我慢慢道来,让你体会一下多线程的强大功能。

1.创建多线程程序:

首先,先介绍一下实现多线程的具体步骤。在C++Builder中虽然用Tthread对象说明了线程的概念,但是Tthread对象本身并不完整,需要在TThread下新建其子类,并重载Execute方法来使用线程对象。在C++Builder下可以很方便地实现这一点。

在C++Builder IDE环境下选择菜单File|New,在New栏中选中Thread Object,按OK,接下来弹出输入框,输入TThread对象子类的名字MyThread,这样C++Builder自动为你创建了一个名为TMyThread的TThread子类。同时编辑器中多了一个名为Unit2.cpp的单元,这就是我们创建的TMyThread子类的原码,如下:

#include

#pragma hdrstop

#include“Unit2.h”

#pragma package(smart_init)

//---------------------

// Important: Methods and properties of objects in VCL can only be

// used in a method called using Synchronize, for example:

//

// Synchronize(UpdateCaption);

//

// where UpdateCaption could look like:

//

// void __fastcall MyThread::UpdateCaption()

//{

// Form1->Caption=“Updated in a thread”;

//}

//--------------------

__fastcall MyThread::MyThread(bool CreateSuspended)

: TThread(CreateSuspended)

{

}

//--------------------

void __fastcall MyThread::Execute()

{

//---- Place thread code here----

}

//---------------------

其中的Execute()函数就是我们要在线程中实现的任务的代码所在处。在原代码中包含Unit2.cpp,这个由我们创建的TMyThread对象就可以使用了。使用时,动态创建一个TMyThread对象,在构造函数中使用Resume()方法,那么程序中就增加了一个新的我们自己定义的线程TMyThread,具体执行的代码就是Execute()方法重载的代码。要加载更多的线程,没关系,只要继续创建需要数量的TMyThread对象就成。

好了,文章到此结束,希望可以帮助到大家。

租服务器,如何租用服务器svn 教程(svn使用教程是什么)