Вопрос по linux, multithreading, posix, c – Связь между двумя потоками в pthread

2

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

Ваш Ответ

2   ответа
1

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

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

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

Спасибо за ответ. Я разместил свой код для других сомнений, он присутствует в ссылке ниже.stackoverflow.com/questions/10860436/…. duslabo
4

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

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

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

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

Большое спасибо за идею подумать о моем требовании ... А что такое атомарная операция чтения и записи? что оно делает ? Потому что я не смог найти его в Google :( duslabo

Похожие вопросы