android 串口线程阻塞,刚接触多线程,几个问题不明白 您所在的位置:网站首页 linux串口阻塞多线程读取数据 android 串口线程阻塞,刚接触多线程,几个问题不明白

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

2024-03-22 03:37| 来源: 网络整理| 查看: 265

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函数来设置为非阻塞通讯



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有