У меня есть код, который читает из дескриптора файла с 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, у меня нет проблем, но несколько потоков вызывают выходное поведение.
Задача ещё не решена.
Других решений пока нет …