go语言无缓冲的channel无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道 。
这种类型的通道要求发送goroutine和接收goroutine同时准备好 , 才能完成发送和接收操作 。否则,通道会导致先执行发送或接收操作的 goroutine 阻塞等待 。
这种对通道进行发送和接收的交互行为本身就是同步的 。其中任意一个操作都无法离开另一个操作单独存在 。
阻塞:由于某种原因数据没有到达,当前协程(线程)持续处于等待状态 , 直到条件满足,才接触阻塞 。
同步:在两个或多个协程(线程)间,保持数据内容一致性的机制 。
下图展示两个 goroutine 如何利用无缓冲的通道来共享一个值:
在第 1 步,两个 goroutine 都到达通道 , 但哪个都没有开始执行发送或者接收 。
在第 2 步,左侧的 goroutine 将它的手伸进了通道,这模拟了向通道发送数据的行为 。这时,这个 goroutine 会在通道中被锁?。钡浇换煌瓿?。
在第 3 步,右侧的 goroutine 将它的手放入通道,这模拟了从通道里接收数据 。这个 goroutine 一样也会在通道中被锁?。?直到交换完成 。
在第 4 步和第 5 步,进行交换,并最终,在第 6 步,两个 goroutine 都将它们的手从通道里拿出来,这模拟了被锁住的 goroutine 得到释放 。两个 goroutine 现在都可以去做别的事情了 。
如果没有指定缓冲区容量 , 那么该通道就是同步的 , 因此会阻塞到发送者准备好发送和接收者准备好接收 。
无缓冲channel: —— 同步通信
go语言做串口通信,我应该从什么地方入手,IO是什//创建一个串口通讯 SerialPort CurrentPort = null; CurrentPort = new SerialPort(); CurrentPortReadBufferSize = 128; CurrentPortPortName = comName; //端口号 CurrentPortBaudRate = bandRate; //比特率 CurrentPortParity =parity;/go语言做串口通信,我应该从什么地方入手,IO是什
go语言做串口通信,我应该从什么地方入手,IO是什么?有什么用?//创建一个串口通讯
SerialPort CurrentPort = null;
CurrentPort = new SerialPort();
CurrentPort.ReadBufferSize = 128;
CurrentPort.PortName = comName;//端口号
CurrentPort.BaudRate = bandRate; //比特率
CurrentPort.Parity =parity;//奇偶校验
CurrentPort.StopBits = stop;//停止位
CurrentPort.DataBits = databit;//数据位
CurrentPort.ReadTimeout = 1000; //读超时go语言串口通信,即在1000内未读到数据就引起超时异常
//绑定数据接收事件,因为发送是被动go语言串口通信的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理
CurrentPort.DataReceived += Sp_DataReceived;
CurrentPort.Open();
定义一个变量 byte[] receiveStr;
//绑定的事件处理函数
private static void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
SerialPort sp = sender as SerialPort;
if (sp == null)
return;
byte[] readBuffer = new byte[sp.ReadBufferSize];
sp.Read(readBuffer, 0, readBuffer.Length);
//赋值
receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串 。
}
//你要求的按钮事件可以这么写
private void button1_Click(object sender, EventArgs e)
{
if(receiveStr!=null)
{
变量xxx=receiveStr;
}
}
go语言--Goroutines1、goroutine:在go语言中,每一个并发的执行单元叫做goroutine,如果一个程序中包含多个goroutine,对两个函数的调用则可能发生在同一时刻
2、main goroutine:当一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫他为main gorountine
推荐阅读
- html5全屏播放按钮,h5怎么全屏播放
- 怎么让显卡兼容主板电脑,显卡怎么和主板平行
- 微信视频怎么备份到硬盘,微信视频怎么保存到备忘录
- mysql第二次查询比第一次快,mysql首次查询为什么要很久
- C语言队列的主函数 c语言队列的用法
- js怎么判断360手机浏览器,js如何判断浏览器是否是ie
- 婚纱网站毕业设计代码,婚纱设计毕业论文
- word2007简体转繁体,word 简体转繁体
- java更改代码颜色 java变色