我的代码从read
unistd.h
的文件描述符中读取。我遇到奇怪的行为,遇到read
的线程退出,我在文档中找不到任何可以解释这一点的内容。
有谁知道为什么会这样?
我不确定发布代码是否有帮助,有很多不相关的代码片段,但这里是一个精简版:
我初始化文件描述符:
(m_serialFD
是类型int
的成员,这发生在构造函数中)
m_serialFD = open("/dev/ttymxc0", O_RDWR | O_NOCTTY);
// flag setting code here....
稍后在构造函数中,我初始化一个互斥成员变量:
pthread_mutex_init (&m_serialMutex, NULL);
稍后在成员函数中:
(message
只是一个chars
nBytes
长的数组
pthread_mutex_lock (&m_serialMutex);
// write some stuff then get the response
read (m_serialFD, message, nBytes);
pthread_mutex_unlock (&m_serialMutex);
我在读取调用周围锁定了一个互斥锁,因为我有多个成员函数进行读写操作,我不希望响应混淆。我注意到的一件事是,当我只用一个读取m_serialFD的线程来运行这个代码时,我没有问题,但多个线程会导致退出行为。