当前位置: 技术问答>linux和unix
希望在这个区的哥们帮帮我
来源: 互联网 发布时间:2016-07-02
本文导语: 串口的互斥访问问题:我想用一个线程来实时监测串口,然后根据这个线程收到串口的数据解析获得的不同数据后 在创建相应的子线程来完成不同的任务,这个监测线程一直在运行,其他的线程是动态的创建的。 问题: ...
串口的互斥访问问题:我想用一个线程来实时监测串口,然后根据这个线程收到串口的数据解析获得的不同数据后
在创建相应的子线程来完成不同的任务,这个监测线程一直在运行,其他的线程是动态的创建的。
问题:
监测线程是使用串口(只是检测是否可读),其他的子线程有时候又要向串口写入数据,我就写了个互斥的向uart1写的函数 int write_to()
这个函数在多个子线程中都要用到,就是说write_to()函数在检测线程向串口1写入数据时候只能用
pthread_create(&id,NULL,(void *)write_to,(void *)permerter)来使用,我是为了检测线程不会因为write_to()阻塞了而停止监视。而在子线程中要写入数据的时候是调用该线程呢还是在子线程中动态的也创建该write_to()函数???????
这个函数是不是编程临界资源了吗???该怎么使用这个函数?????
|
使用pthread_mutex_t
在每次调用write_to之前, 用pthread_mutex_lock()用完后pthread_mutex_unlock()
如果不想被阻塞, 用pthread_mutex_trylock()
在每次调用write_to之前, 用pthread_mutex_lock()用完后pthread_mutex_unlock()
如果不想被阻塞, 用pthread_mutex_trylock()
|
代码应该没有拷贝这个说法吧。只是该函数涉及到的局部变量会在每次调用时有一个拷贝。
|
而在子线程中要写入数据的时候是调用该线程呢还是在子线程中动态的也创建该write_to()函数
你说的动态创建是什么意思?
只要把 int write_to() 放到线程回调里面就行了,或者用g_idle_.. 发送异步消息区调用 int write_to也可以啊。
在写之前,照上面说的上个锁。
你说的动态创建是什么意思?
只要把 int write_to() 放到线程回调里面就行了,或者用g_idle_.. 发送异步消息区调用 int write_to也可以啊。
在写之前,照上面说的上个锁。
|
我做java的,不是很熟悉c的程序结构,但是逻辑都是一样的;
不管你的方法有几份,只要用同一个锁,只要这个锁被锁上,其他的方法就不会进入到互斥块中
所以这个锁应该是多个线程共用的一个锁变量;
不管你的方法有几份,只要用同一个锁,只要这个锁被锁上,其他的方法就不会进入到互斥块中
所以这个锁应该是多个线程共用的一个锁变量;