c语言 多线程 多任务,多线程和多进程

很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。

今天终于下了决心,写点东西,以后可以再修修补补也无妨。

一.为何需要多进程(或者多线程),为何需要并发?

这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。

我想,只要你不是整天都写那种int main()到底的代码的人,那么或多或少你会遇到代码响应不够用的情况,也应该有尝过并发编程的甜头。就像一个快餐点的服务员,既要在前台接待客户点餐,又要接电话送外卖,没有分身术肯定会忙得你焦头烂额的。幸运的是确实有这么一种技术,让你可以像孙悟空一样分身,灵魂出窍,乐哉乐哉地轻松应付一切状况,这就是多进程/线程技术。

并发技术,就是可以让你在同一时间同时执行多条任务的技术。你的代码将不仅仅是从上到下,从左到右这样规规矩矩的一条线执行。你可以一条线在main函数里跟你的客户交流,另一条线,你早就把你外卖送到了其他客户的手里。

所以,为何需要并发?因为我们需要更强大的功能,提供更多的服务,所以并发,必不可少。

二.多进程

什么是进程。最直观的就是一个个pid,官方的说法就:进程是程序在计算机上的一次执行活动。

说得简单点,下面这段代码执行的时候

intmain()

{

printf(”pid is %d/n”,getpid() );

return0;

}

进入main函数,这就是一个进程,进程pid会打印出来,然后运行到return,该函数就退出,然后由于该函数是该进程的唯一的一次执行,所以return后,该进程也会退出。

看看多进程。linux下创建子进程的调用是fork();

#include

#include

#include

voidprint_exit()

{

printf("the exit pid:%d/n",getpid() );

}

main ()

{

pid_t pid;

atexit( print_exit );      //注册该进程退出时的回调函数

pid=fork();

if(pid

printf("error in fork!");

elseif(pid == 0)

printf("i am the child process, my process id is %d/n",getpid());

else

{

printf("i am the parent process, my process id is %d/n",getpid());

sleep(2);

wait();

}

}

i am the child process, my process id is 15806

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛应用于系统编程的编程语言,支持多进程多线程编程。下面是关于C语言多进程多线程的一些常见面试题及其回答: 1. 多进程多线程的区别是什么? 多进程是指在一个程序中同时运行多个进程,每个进程都有自己独立的内存空间和系统资源,进程之间通信需要使用进程间通信机制。而多线程是指在一个进程中创建多个线程,这些线程共享同一进程的内存空间和系统资源,线程之间通信更加简单,可以直接访问共享变量。 2. 如何在C语言中创建新的进程? 在C语言中,可以使用fork()函数创建新的进程。fork()函数会复制当前进程的所有资源和代码,得到一个新的进程,新的进程会从fork()函数的调用点开始执行。 3. 如何在C语言中创建新的线程? 在C语言中,可以使用pthread_create()函数创建新的线程。pthread_create()函数会在调用点创建一个新的线程,并指定线程的执行函数,新的线程会从执行函数的起始点开始执行。 4. 进程间通信的方式有哪些? 进程间通信方式有管道、命名管道、信号量、共享内存、消息队列等。这些方式可以用于不同进程之间的数据交换和同步。 5. 线程同步的方式有哪些? 线程同步的方式有互斥锁、条件变量、读写锁、信号量等。这些方式可以用于不同线程之间的数据共享和访问控制,保证线程的安全性。 总结: C语言支持多进程多线程编程,多进程多线程的区别在于进程之间需要使用进程间通信机制进行通信,而线程之间可以直接访问共享变量。创建新的进程可以使用fork()函数,创建新的线程可以使用pthread_create()函数。进程间通信的方式有管道、命名管道、信号量、共享内存、消息队列等,线程同步的方式有互斥锁、条件变量、读写锁、信号量等。了解这些概念和方式对于C语言多进程多线程编程的理解和应用非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值