當前位置:首頁 » 編程語言 » 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;
}

大概是這樣,我也沒寫過,你自己再去網路下。