当前位置:  技术问答>linux和unix

刚接触多线程,几个问题不明白

    来源: 互联网  发布时间:2016-07-15

    本文导语:  1.多线程中,两个子线程分别对一个串口进行读写,是不是需要在每个线程里都要先打开串口,读或者写完毕后,再关闭串口? 在这个过程中,需要进行互斥吗? 2.看线程编程都是先thread_create,然后thread_join。这就是...

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

|
1:串口在这里是一个公用的资源,所以不需用互斥量来限制每一时刻只有一个人在使用
2:对于你所创建的线程如果需要循环一般是在函数体里面实现的,用while(*txvt)就可以达到目的了
3:在读串口的数据的时候,为了让系统资源充分利用,此时最好不要用read一直读数据,这样效率会很低,最好用定时器在这里监控,比如select函数,可以设置超时时间,这样系统资源就可以充分的利用》

|
1.多线程中,两个子线程分别对一个串口进行读写,是不是需要在每个线程里都要先打开串口,读或者写完毕后,再关闭串口?
在这个过程中,需要进行互斥吗? 
两个子线程可以共用一个串口,只打开一次。需要互斥
2.看线程编程都是先thread_create,然后thread_join。这就是结束了是吧?那么怎么实现死循环呢?(一直要接收串口,不能丢数据啊) 
thread_join阻塞调用线程,直到指定的线程结束。
3.网上有个文章说read串口容易造成阻塞,建议用select,怎么回事?应该用什么?
不太明白原理

|
2.在父线程中通过pthread_create创建子线程,在子线程中通过while(1)读串口

|
在线程调用的函数中用while(1),实现死循环

|

1.如果这个资源不支持重入,就必须互斥,你这里应该是要互斥的。
2.thread_join是父线程用来帮助结束的子线程善后的操作,你可以设置子线程为分离线程,就可以不用等待它了。
3.read本身是阻塞操作啊,用select的话,可以在多个fd间实现复用,而且还可以设置超时。
具体用法看书吧。

|
串口打开一次(不在线程里)
2个线程需要互斥

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎么用javamail发送附件,小弟刚接触,请各位大侠指教,谢谢!!!
  • 初次接触,怎么在FreeBSD中使用C/C++?
  • 刚接触SUSE, 请问在它下边怎么用SVN,Bugzilla
  • linux我刚接触,我装了linux后,却把用户名和口令忘了,还有办法进却吗
  • 作为一个刚刚接触linux的新手来说,应该如何学习?从哪里开始?谢谢高手赐教!
  • 刚接触ubuntu ,一些概念有点乱,谁帮我理一下
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • 初次接触linux,关于linux 用户权限问题请教!
  • 有接触过db2的高手吗?请问安装完后管理员的用户名和口令?
  • 小弟刚接触java,不知道大家现在都用什么编译源程序?
  • 刚接触javamail,高分问一些简单的问题
  • 以前没有接触过linux,现要在linux上写一个软件,请问我要看那些资料!
  • 刚接触JSP,有问题。
  • 刚接触GCC,请教一个问题!
  • 想接触linux大家指点一下
  • 刚接触linux的新手的提问?
  • 脚本接触的太少,能帮忙解释一下,这句话是干什么的吗?
  • 我想接触一下LINUX的内核心,哪个版本比较合适哦.
  • 小弟刚刚准备接触LINUX,达人们进来啊谢谢了哦
  • 开始接触学习内核,新手提问!!很简单的,来得分吧


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3