62库

您现在的位置是:首页 > 前端开发 > Html/Css > 正文

Html/Css

c语言多进程函数 c语言多进程多线程面试题

Admin2023-11-11Html/Css69

LINUX下C语言实现RC4多线程或多进程技术实现快速解密。

线程

可以用pthread_kill函数

传递信号SIGSTOP挂起

传递SIGCONT 恢复

进程

调用系统的stop挂起

或者用kill -stop 挂起

类似的 用SIGCONT 恢复。

请问怎么在win7环境下用C语言写多进程?(可以的话,请附上简单代码,谢谢!)

你可以看看我的博客,里面windows分类下有CreateThread 与 CreateProcess 简单说明。

加油

怎么在win7环境下用C语言写多进程

可以用code::blocks配MinGW编译器,无论是初学者还是高手,都适用。配置简单,易于操作。

Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境。 Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了著名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。

关于C语言的双向循环链表多进程大量并发插入和删除问题

处理此问题c语言多进程函数的思路,此类问题一般属于生产者-消费者模型,即若干生产者写入,若干消费者读取.若加解锁开销不大,请尽量不要用其它方案. 反之可以考虑,双缓冲区,或者多缓冲区方案,将读写分到不同c语言多进程函数的缓冲区中,可以使大量读/写操作免于等待.

在linux下用c语言实现用多进程同步方法演示“生产者-消费者”问题

这个问题需要的知识主要包括:

1 多进程间进行通信;

2 使用同步信号量(semaphore)和互斥信号量(mutex)进行数据保护。

参考代码如下,可以参照注释辅助理解:

#include stdio.h

#include stdlib.h

#include unistd.h

#include pthread.h

#include semaphore.h

#define N 2   // 消费者或者生产者的数目

#define M 10 // 缓冲数目

int in = 0;   // 生产者放置产品的位置

int out = 0; // 消费者取产品的位置

int buff[M] = {0}; // 缓冲初始化为0, 开始时没有产品

sem_t empty_sem; // 同步信号量, 当满了时阻止生产者放产品

sem_t full_sem;   // 同步信号量, 当没产品时阻止消费者消费

pthread_mutex_t mutex; // 互斥信号量, 一次只有一个线程访问缓冲

int product_id = 0;   //生产者id

int prochase_id = 0; //消费者id

/* 打印缓冲情况 */

void print()

{

int i;

for(i = 0; i  M; i++)

   printf("%d ", buff[i]);

printf("\n");

}

/* 生产者方法 */ 

void *product()

{

int id = ++product_id;

while(1)

{

   // 用sleep的数量可以调节生产和消费的速度,便于观察

   sleep(1);

   //sleep(1);

  

   sem_wait(empty_sem);

   pthread_mutex_lock(mutex);

  

   in = in % M;

   printf("product%d in %d. like: \t", id, in);

  

   buff[in] = 1;  

   print();  

   ++in;

  

   pthread_mutex_unlock(mutex);

   sem_post(full_sem);  

}

}

/* 消费者方法 */

void *prochase()

{

int id = ++prochase_id;

while(1)

{

   // 用sleep的数量可以调节生产和消费的速度,便于观察

   sleep(1);

//sleep(1);

  

   sem_wait(full_sem);

   pthread_mutex_lock(mutex);

  

   out = out % M;

   printf("prochase%d in %d. like: \t", id, out);

  

   buff[out] = 0;

   print();

   ++out;

  

   pthread_mutex_unlock(mutex);

   sem_post(empty_sem);

}

}

int main()

{

pthread_t id1[N];

pthread_t id2[N];

int i;

int ret[N];

// 初始化同步信号量

int ini1 = sem_init(empty_sem, 0, M); 

int ini2 = sem_init(full_sem, 0, 0);  

if(ini1  ini2 != 0)

{

   printf("sem init failed \n");

   exit(1);

//初始化互斥信号量 

int ini3 = pthread_mutex_init(mutex, NULL);

if(ini3 != 0)

{

   printf("mutex init failed \n");

   exit(1);

// 创建N个生产者线程

for(i = 0; i  N; i++)

{

   ret[i] = pthread_create(id1[i], NULL, product, (void *)(i));

   if(ret[i] != 0)

   {

    printf("product%d creation failed \n", i);

    exit(1);

   }

}

//创建N个消费者线程

for(i = 0; i  N; i++)

{

   ret[i] = pthread_create(id2[i], NULL, prochase, NULL);

   if(ret[i] != 0)

   {

    printf("prochase%d creation failed \n", i);

    exit(1);

   }

}

//销毁线程

for(i = 0; i  N; i++)

{

   pthread_join(id1[i],NULL);

   pthread_join(id2[i],NULL);

}

exit(0); 

}

在Linux下编译的时候,要在编译命令中加入选项-lpthread以包含多线程支持。比如存储的C文件为demo.c,要生成的可执行文件为demo。可以使用命令:

gcc demo.c -o demo -lpthread

程序中为便于观察,使用了sleep(1);来暂停运行,所以查看输出的时候可以看到,输出是每秒打印一次的。

c语言多进程编程

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

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

share.hc语言多进程函数

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

typedef struct{

int a[2];

int b[2];

int id;

}share_use;

1.c:

#includeunistd.h

#includestdio.h

#includestdlib.h

#includestring.h

#includesys/types.h

#includesys/ipc.h

#includesys/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:

#includeunistd.h

#includestdio.h

#includestdlib.h

#includestring.h

#includesys/types.h

#includesys/ipc.h

#includesys/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:

#includeunistd.h

#includestdio.h

#includestdlib.h

#includestring.h

#includesys/types.h

#includesys/ipc.h

#includesys/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语言多进程函数和c语言多进程多线程面试题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~