c语言多进程函数 c语言多进程多线程面试题
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语言多进程多线程面试题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~