Каковы ограничения на обратный вызов ALSA PCM?

Я пишу программу под Linux, которая использует как воспроизведение, так и запись с помощью ALSA (подключена к пользовательскому устройству). Я хотел бы использовать архитектуру асинхронного обратного вызова для чтения и записи данных.

Однако я не смог получить никакой информации относительно ограничений того, что мне разрешено делать внутри обратного вызова. В частности, должен ли я быть асинхронно безопасным? Если да, то это, похоже, сильно ограничивает возможности, поскольку, помимо всего прочего, я не должен ссылаться ни на какие глобальные переменные, что делает довольно сложным, например, чтение из буфера, который заполняется основным потоком выполнения, или запись в буфер, который впоследствии сохраняется в файл вне обратного вызова.

Есть ли какие-либо конструкции параллелизма на языке Си, которые я могу использовать в обратных вызовах ALSA для координации использования глобальных файлов с основным потоком? Например, могу ли я использовать семафоры POSIX? Есть ли у меня гарантия, что обратный вызов ALSA является атомарным по отношению к основному потоку (я знаю, что он не является атомарным по отношению к другим обратным вызовам ALSA)?

Большое спасибо за любое понимание, которое люди могут привнести в это.

5
задан Tom West 28 February 2012 в 23:37
поделиться