• 2024-09-28golang shell
    packageshellimport( "context" "fmt" "os/exec" "time")//自定义输出结构体typecustomOutputstruct{ outPutchanstring resetCtxchanstruct{}}//Write将输出写入到customOutput结构体中,并通知重置超时。func(ccustomOutput
  • 2024-08-31Go 并发编程之Channel
    Go中的channel是一种用于在Goroutine之间传递数据的通信机制,通常被用来实现Goroutine之间的同步和数据共享。1.channel的基本概念1.1创建channelchannel在类型上分为两种:双向和单向。双向channel:既能接收又能发送。单向channel:只能发送或只能接收。chann
  • 2024-08-21两种形式的dma 实现memory copy代码
    在飞思卡尔的时候,需要用SDMA实现内存到内存memorycopy的功能,需要做两部分的工作:1:在DMAcontroller中加入M2M的支持。2:写一个驱动来调用DMAcontroller的M2M功能。上面的2实际上对于不同的SoC来讲,思路是一样的,有通用性,在这里总结下。当时在实现的时候,用了两种方法:1:cyclic,用dma_a
  • 2024-08-13golang 管道channel相关问题
    一funcmain(){ c1:=make(chanany) <-c1}上面代码运行肯定会报deadlock的死锁错误,但是下面这样,如果有一个协程一直在运行,则不会报错,大致就是因为协程还在运行,所属主协程main不确定是否会往管道c1中写数据,所以就会一直阻塞在这里,上面的代码块或者没有一直执行的协程
  • 2024-07-26Golang常见的并发模式
    Golang常见的并发模式Go语言最吸引人的地方是它内建的并发支持首先要明确一个概念:并发不是并行。并发更关注的是程序的设计层面,并发的程序完全是可以顺序执行的,只有在真正的多核CPU上才可能真正地同时运行。并行更关注的是程序的运行层面,并行一般是简单的大量重复,例如GPU
  • 2024-07-23交替打印数字和字母
    /*问题描述使用两个goroutine交替打印序列,一个goroutine打印数字,另外一个goroutine打印字母,最终效果如下:12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728*/funcQuestionOne(){ numChan,letterChan:=make(chanstruct{}),make(ch
  • 2024-07-01Channel
    什么是chanel用来连接并发的goroutine的,一个goroutine通过chanel向另一个goroutine发送消息,对应的goroutine通过channel来接受消息。如何定义channelvar<变量名称>chan<数据类型>varintChanchanintvarstrChanchanstringvarstrChanchan*stringvarobjChanchan
  • 2024-06-18golang中用chan实现迭代器
    实现代码如下:packagemainimport( "log" "time")/* 两种迭代器的实现*///采用index的方式实现(非线程安全)typeListStructstruct{ indexint data[]int}func(sl*ListStruct)Next()int{ d:=sl.data[sl.index] sl.index+=1 returnd}func(
  • 2024-05-28两个 goroutine 交替打印 1-100
    两个goroutine交替打印1-100channel操作//两个Goroutine交替打印1到100funcmain(){ ch1,ch2:=make(chanint),make(chanint) done:=make(chanint) gofunc(){ forx:=rangech1{ println("ch1:",x) ch2<-x+1 } }() gofunc(
  • 2024-05-27golang为什么chan大部分是发送结构体,而不是其它比如string
     typetokenstruct{}typeGroupstruct{cancelfunc(error)wgsync.WaitGroupsemchantokenerrOncesync.Onceerrerror}func(g*Group)done(){ifg.sem!=nil{<-g.sem}g.wg.Done()}在Go语言中,通道(
  • 2024-05-20Chan's Algorithm
    Chan'sAlgorithm简介以往常见的求凸包的算法复杂度多为\(\Theta(n\logn)\)(如GrahamScan算法、Andrew算法等),其中\(n\)是平面内的点数。当事先已知大多数点位于凸包内部,只有少数点位于边界上时,也有更高效的算法,如JarvisMarch算法,其复杂度为\(\Theta(nh)\),其中\(h\)
  • 2024-05-11EDAC工具助力检测服务器内存故障
    介绍EDAC工具前我们先知道什么是EDACEDAC(ErrorDetectionAndCorrection错误检测与纠正),是Linux系统的错误检测和纠正的框架,它的目的是在linux系统运行过程中,当错误发生时能够发现并且报告出硬件错误。内存有两种错误类型分别是CE和UE,CE是CorrectableError的简称,UE是Uncor
  • 2024-04-08【go】golang中的通道
    通道:channel名词:在goroutine中通信的管道注意:任何时候,同一时刻只能有一个goroutine访问通道进行发送和获取数据通道的顺序:遵循先入先出的规则通道的定义//定义一个通道var变量名chan数据类型//比如:varintChchanint64varstrChchanstringvarmapChchanm
  • 2024-04-07【Go高阶】细说 Channel 的进阶用法
    在Go语言中,channel是一种内置的数据结构,用于在不同的goroutine之间进行通信。它是一个非常强大的并发工具,可以实现各种并发模式和同步机制。以下是一些Go语言中channel的高级用法:1.BufferedChannels带缓冲的channel可以在没有接收者的情况下发送数据,数据会被存储在chan
  • 2024-04-03golang中各种状态下channel(管道)的读、写、close操作
    一、简介golang中各种状态下channel(管道)的读、写、close操作二、结论channel状态读写closeclose零值panicpanicnil永久阻塞(deadlock)永久阻塞(deadlock)panicbuffer满正常永久阻塞(deadlock)正常buffer空永久阻塞(deadlock)正常正常三、
  • 2024-03-30Go 源码之 Chan
    Go源码之chango源码之chan-Jxy博客一、总结chan提供了一种在goroutine之间进行数据交换和同步的方式。通道可以用于控制并发访问和共享数据,从而减少竞态条件和死锁问题,并且可以自然地处理异步事件和信号。如果你的应用程序需要在goroutine之间传递数据或消息,那
  • 2024-03-296.1物联网RK3399项目开发实录-驱动开发之ADC驱动(wulianjishu666)
    物联网嵌入式开发源码例程:链接:https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd=2ihg *******************************************************************************************ADC使用简介AIO-3399J开发板上的AD接口有两种,分别为:温度传感器(Temperatur
  • 2024-03-24DMA Engine框架(一)
    参考:《Linux设备驱动开发》http://www.wowotech.net/linux_kenrel/dma_engine_overview.htmlhttps://blog.csdn.net/yangguoyu8023/article/details/121852348https://www.byteisland.com/dma-%E4%B8%8E-scatterlist-%E6%8A%80%E6%9C%AF%E7%AE%80%E4%BB%8B/https://blog.csdn
  • 2024-03-24Golang: 通过chan来实现并发访问控制
    通过chan来实现并发访问控制通过chan来实现并发访问控制背景介绍这是在阅读grom的源码时,他的schema的初始化方式,给我留下来很深刻的印象,本文将通过channel的一些使用来实现实例的并发访问技术要点如果chan为空时,尝试读可以成功,获得的结果为空示例代码packagemai
  • 2024-03-24Golang: 通过chan来实现并发访问控制
    通过chan来实现并发访问控制通过chan来实现并发访问控制背景介绍这是在阅读grom的源码时,他的schema的初始化方式,给我留下来很深刻的印象,本文将通过channel的一些使用来实现实例的并发访问技术要点如果chan为空时,尝试读可以成功,获得的结果为空示例代码packagemai
  • 2024-03-18Golang多线程打印ABC
    packagemainimport("fmt""sync")funcThreeG(){varch1,ch2,ch3=make(chanstruct{}),make(chanstruct{}),make(chanstruct{})varwgsync.WaitGroupwg.Add(3)gofunc(sstring){deferwg.Done
  • 2024-03-12golang 协程池
     packagemainimport("fmt""time")typeTaskstruct{ffunc()error}func(tTask)exec()error{returnt.f()}funcNewTask(funfunc()error)*Task{return&Task{f:fun,}}typePoolstruct
  • 2024-03-06Golang使用Goroutine实现筛素数
    //Copyright2009TheGoAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-style//licensethatcanbefoundintheLICENSEfile.packagemainpackagemainimport"fmt"//Sendthesequence2,3,4,...tochannel&
  • 2024-02-26select 条件语句【GO 基础】
    〇、select简介select语句类似于switch语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。默认的子句defa
  • 2024-02-24Go语言精进之路读书笔记第34条——了解channel的妙用
    c:=make(chanint)//创建一个无缓冲(unbuffered)的int类型的channelc:=make(chanint,5)//创建一个带缓冲的int类型的channelc<-x//向channelc中发送一个值<-c//从channelc中接收一个值x=<-c//从channelc接收一个值并