当前位置:首页 » 编程语言 » c语言多任务编程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言多任务编程

发布时间: 2023-08-04 21:56:14

c语言多进程编程

多进程这个词用得比较少,听过来有点不熟悉。你这个程序在linux下应该很容易实行,就是个进程间通信的问题,管道、消息队列、共享内存都可以,可以找找相关资料。昨天失言不好意思。
三个源文件分别为1.c、2.c、3.c一个头文件share.h。
share.h:
//共享的内存,两个数组
typedef struct{
int a[2];
int b[2];
int id;
}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语言编程实现:父进程创建二个子进程,三个进程各自打印出其进程


#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

int main()

{

int i=2;

int pid=0;

printf("father id=%ld ",getpid());

while(i-->0){

pid = fork();

if(pid==0){

printf("son id=%ld ",getpid());

return 0;

}

}

return 0;

}

Ⅲ C语言怎么实现多任务的

跟语言无关,多任务是跟操作系统相关的。

Ⅳ C语言编程多分支

你的题目中大众应该是起步价7元,而不是起步价7元/公里,尼桑也应该是起步价8元,而不是8元/公里

按照题目要求编写的C语言程序如下

#include<stdio.h>

#include<string.h>

intmain()

{

chars[10];

intkm;

floatfee;

printf("请输入乘车的车型及行车公里数 ");

scanf("%s%d",s,&km);

if(strcmp(s,"大众")==0){

if(km<=3){

fee=7;

}else{

fee=7+(km-3)*2.1;

}

printf("应付车资%f",fee);

}elseif(strcmp(s,"尼桑")==0){

if(km<=3){

fee=8;

}else{

fee=8+(km-3)*2.4;

}

printf("应付车资%f",fee);

}elseif(strcmp(s,"本田")==0){

if(km<=3){

fee=9;

}else{

fee=9+(km-3)*2.7;

}

printf("应付车资%f",fee);

}else{

printf("输入车型不正确!");

}

return0;

}

Ⅳ C语言程序编程

inti,j,m=0;
for(i=300;m%2==0;i--)
{
m=0;
for(j=1;j<=i;j++)
if(i%j==0)m++;
}
returni+1;

运行验证:

Ⅵ [高分,急]C语言,如何实现多线程,有具体方案,请提供!

你这个问题可是超过200分的啊,
这个往大了说是一个比较复杂的设计方案。

实际上C语言是没有多线程的概念的,但是我们可以通过Task来实现多任务。

简单的说,可以采取以下方案:
定义一个主Task,将其置为常驻Task,用以进行Task调度和Task的启动/终了和交互的管理。
定义一个Task优先级列表,用优先级来作为Task调度和管理的基础。
定义一个共享域,和相应的事件分发/广播/传递的管理机制,由主Task来实现各Task间的事件传递。
定义3个List,实现Active,Ready,Dead的Task的管理和调度。
定义各普通Task,包含Task基本信息:Task的栈指针,Task情报,Task存储空间大小,Task的优先级,Task的事件列表(定义可以接收/发送的事件,以及可以排队的事件的个数),以及如果需要的话可以定义Task的从属(父子)关系。

另外还有几个注意点:
1. 通过C的临界域(critical section)结合PV操作来实现某些Task的原子性处理要求。
2. 通过Signal来实现中断和再开
3. 如果需要处理中断和再开的话,一定要注意现场保护
4. 同优先级的Task可以通过时间片轮循的方式进行多任务实现

暂时就想到这么多,有不明白的通过消息进一步交流吧:)

Ⅶ 怎样用c语言实现多任务同时运行,急.......

用个API函数。
包函头文件 window.h
CreateThread(NULL,0,FunPro,NULL,0,NULL);

你再写个线程函数 FunPro

int WINAPI FunPro()
{
return 0;
}

大概是这样,我也没写过,你自己再去网络下。