本篇內(nèi)容主要講解“golang怎么用通道實現(xiàn)串口信號量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“golang怎么用通道實現(xiàn)串口信號量”吧!
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)清苑免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
串口通信,使用權(quán)該誰?需要采用信號量,進行控制。go如何實現(xiàn)?
緩沖通道的緩沖大小等于資源數(shù)
time計時器控制超時
func NewPortAvailableSem()*PortAvailableSem{ ps := &PortAvailableSem{ PortChan: make(chan int, 1), } ps.PortChan <- 1 return ps } type PortAvailableSem struct{ PortChan chan int } func (ps *PortAvailableSem) Acquire(block bool, timeout int) bool{ if block{ ticker := time.NewTicker(time.Second*time.Duration(timeout)) select{ case <- ps.PortChan: ticker.Stop() return true case <-ticker.C: return false } }else{ select{ case <- ps.PortChan: return true default: return false } } return false } func (ps *PortAvailableSem) Release(){ if ps.Locked(){ select{ case ps.PortChan <- 1: } } } func (ps *PortAvailableSem) Locked() bool{ return len(ps.PortChan) == 0 }
到此,相信大家對“golang怎么用通道實現(xiàn)串口信號量”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!