android 串口线程阻塞,刚接触多线程,几个问题不明白

关于Android多线程下串口操作,文章讨论了串口是否需要在每个线程打开和关闭、如何实现死循环接收串口数据,以及read操作可能的阻塞问题。建议使用互斥锁确保串口操作的安全,考虑使用select或非阻塞模式提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.多线程中,两个子线程分别对一个串口进行读写,是不是需要在每个线程里都要先打开串口,读或者写完毕后,再关闭串口?

在这个过程中,需要进行互斥吗?

2.看线程编程都是先thread_create,然后thread_join。这就是结束了是吧?那么怎么实现死循环呢?(一直要接收串口,不能丢数据啊)

3.网上有个文章说read串口容易造成阻塞,建议用select,怎么回事?应该用什么?

|

1,需要互斥

2.

3.

从串口读取数据当以原始数据模式(raw data mode)打开串口时,read 系统调用将不管串口输入缓存里有多少字符可读都返回.若没有数据,则阻塞直至有字符到来,或定时器超时.串口设置这个选项后,read 调用都是立即返回.没有数据可读时,read 返回 0 fcntl(fd, F_SETFL, FNDELAY);

直接用read读串口可能会造成堵塞,或数据读出错误。然而用select先查询com口,再用read去读就可以避免,并且当com口延时时,程序可以退出,这样就不至于由于com口堵塞,程序就死了。

|

1——当然需要互斥了,这个串口就是一个关键区域(或叫做临界资源)。

2——thread_create()使用来创建线程的。想要实现循环关键是在函数体内进行。thread_join()——主线程调用该函数是用来等待新创建线程结束,并回收资源的(也就是阻塞)。

建议你使用posix系列的多线程函数(移植性好)。

3——这一般是在socket通讯时才会有的,你可以调用setsockopt函数来设置为非阻塞通讯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值