什么是阻塞和非阻塞?我们就用管道的读写来举例子。
如果没听过管道,就把他理解成文件就行。
一个程序打开管道,并且往管道里面写入数据;
intmain() { intfd=open("fifo",O_WRONLY); if (-1 == fd) { perror("open"); } char buf[32] = {0}; scanf("%s", buf); if (write(fd, buf, strlen(buf)) == -1) { perror("write"); } return 0; }另一个程序打开管道,从管道里面读取数据。
int main() { intfd=open("fifo",O_RDONLY); if (-1 == fd) { perror("open"); } charbuf[32]={0}; if (read(fd, buf, sizeof(buf)) == -1) { perror("write"); } return 0; }默认情况下,用open打开管道是阻塞的模式,也就是说,如果管道没有数据,程序一直停在 read 函数这里,直到管道里面有数据,把它读出来。
创建一个管道,运行程序,现象就是这样的,程序此时阻塞在 read 函数。
如果通过写进程往管道里面写入数据,read能立马把数据读出来。
open函数还给我们提供了非阻塞的模式,加上这个选项,运行程序的时候,即使管道里面没有数据,程序也不会停在 read 函数上,继续向下执行。
这两个现象,就是阻塞和非阻塞。
最后,放上百科的一段解释,大家还有什么见解,欢迎在评论区交流。
阻塞和非阻塞指的是调用者(程序)在等待返回结果(或输入)时的状态。 阻塞时,在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。 非阻塞时,如果不能立刻得到结果,则该调用者不会阻塞当前线程。 因此对应非阻塞的情况,调用者需要定时轮询查看处理状态。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
阻塞
+关注
关注
0文章
24浏览量
8100
原文标题:什么是阻塞和非阻塞
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
Verilog语言中阻塞和非阻塞赋值的不同
来源:《Verilog数字系统设计(夏宇闻)》 阻塞和非阻塞赋值的语言结构是Verilog 语言中最难理解概念之一。甚至有些很有经验的Verilog 设计工程师也不能完全正确地理解:何时使用非
Verilog阻塞和非阻塞原理分析
Verilog阻塞和非阻塞原理分析在Verilog语言最难弄明白的结构中“非阻塞赋值”要算一个。甚至是一些很有经验的工程师也不完全明白“
发表于 11-23 12:02
【分享】Verilog中阻塞与非阻塞语句
同了在第一个clk上升沿到来时,由于b的值未知,赋给c之后,c也为未知值;紧接着,把a的值给b,由于a的值已经给出,所以,结束之后,a、b的值相同,c为x。综合之后,生成两级移位寄存器。 关于非阻塞
发表于 11-03 20:26
深入分析verilog阻塞和非阻塞赋值
学verilog 一个月了,在开发板上面写了很多代码,但是始终对一些问题理解的不够透彻,这里我们来写几个例子仿真出阻塞和非阻塞的区别
发表于 02-11 03:23
•1396次阅读
从I/O的阻塞与非阻塞、I/O处理的单线程与多线程角度探讨服务器模型
这里探讨的服务器模型主要指的是服务器端对I/O的处理模型。从不同维度可以有不同的分类,这里从I/O的阻塞与非阻塞、I/O处理的单线程与多线程角度探讨服务器模型。
FPGA的视频教程之Verilog中阻塞与非阻塞的详细资料说明
本文档的主要内容详细介绍的是FPGA的视频教程之Verilog中阻塞与非阻塞的详细资料说明。
发表于 03-26 17:16
•2次下载
阻塞与非阻塞通信的区别 阻塞和非阻塞应用场景
阻塞通信(Blocking Communication):当进行阻塞通信时,调用者在发起一个I/O操作后会被阻塞,直到该操作完成返回才能继续执行后续代码。
socket编程中的阻塞与非阻塞
在网络编程中, socket 是一个非常重要的概念,它提供了一个抽象层,使得开发者可以不必关心底层的网络通信细节。 socket 编程中的阻塞与非阻塞模式是两种不同的操作方式,它们对程序的响应性
评论