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

LINUX下C语言实现RC4多线程或多进程技术实现快速解密 。线程
可以用pthread_kill函数
传递信号SIGSTOP挂起
传递SIGCONT 恢复
进程
调用系统的stop挂起
或者用kill -stop 挂起
类似的 用SIGCONT 恢复 。
请问怎么在win7环境下用C语言写多进程?(可以的话 , 请附上简单代码,谢谢?。?/h2>你可以看看我的博客,里面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; iM; 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(ini1ini2 != 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; iN; 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; iN; 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; iN; 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语言多进程多线程面试题】关于c语言多进程函数和c语言多进程多线程面试题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读