Связь между двумя streamами в pthread

Я создаю два streamа thread1 и thread2. Thread1 считывает аналоговое значение, а thread2 обрабатывает аналоговое значение, которое считывается в thread1, и задает аргументы PWM. то, что я делал до сих пор, в основном файле (где я создаю streamи), я объявил глобальную переменную (для сохранения аналогового значения) и передал указатель на глобальную переменную на оба streamа. В thread1 считываемое аналоговое значение, хранящееся в глобальной переменной и в thread2, считывает глобальную переменную и обрабатывает ее. Итак, мой вопрос в том, есть ли другой способ сделать это? т.е. у нас есть семафор, мьютекс и т. д., который лучше всего подходит для этого приложения?

На ваш вопрос нет общего ответа, это зависит от вашего использования.

Классическим методом для pthreads было бы использование пары mutex-condition, чтобы сигнализировать изменение значения для streamа чтения. Это было бы уместно для случая, когда этот stream в основном неактивен и работает только на изменение. Здесь переменная условия в дополнение к мьютексу гарантирует, что stream чтения не будет потреблять ресурсы, пока ему нечего делать.

Если ваш stream чтения выполняет какую-то постоянную работу и ему просто нужно использовать значение, существуют разные сценарии: первая должна была защитить переменную с помощью мьютекса, чтобы удостовериться, что прочитанное вами значение не обновляется на полпути и по этому всегда согласован.

Более современный подход состоял бы в том, чтобы использовать (или обеспечить), чтобы ваши операции чтения и записи были атомарными. C11, новый стандарт C, предоставляет интерфейсы для этого, и большинство компиляторов реализуют такие операции уже как расширения.

Я думаю, что для этого потребуется очень простой мьютекс. См. Мой псевдо-код ниже:

Thread1() { Mutex_lock(); Process global variable; Unlock_mutex(); } 

Аналогичный thread2 .. Я могу предоставить более конкретный ответ, если вы предоставите свой текущий код.