SO Question1 & SO Question2 - отличная отправная точка для вас.
Нет ничего, что называется асинхронными и синхронными функциями. Все функции (вызовы) должны возвращаться к вызывающим.
Но есть асинхронные и синхронные операции.
crypto_alloc_ahash()
& crypto_alloc_shash()
отличается тем, что первые состоят из асинхронных операций и последние состоят из синхронных операций.
В случае первой функция, когда вызываемый возвращается немедленно к основной программе, оставив после завершения операции. Когда операции завершаются, они обычно используют СИГНАЛЫ/ПРЕРЫВАНИЯ, чтобы основная программа знала, что они были выполнены. Вы можете увидеть реализацию here, а выдержка приведена ниже.
struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type,
u32 mask)
{
return crypto_alloc_tfm(alg_name, &crypto_ahash_type, type, mask);
}
В случае последнего основной программы (вызывающей) должен ждать операции в функции завершения, чтобы продолжить. Я не могу придумать конкретные сценарии , где синхронизация является обязательной в этом контексте. Вы можете увидеть реализацию here
Действительно обе функции выглядят одинаково, но для типа возвращаемых значений.
Асинхронные варианты функций - это, как правило, то, что вы должны искать в скорости вашей программы. Также вы не можете делать асинхронные вызовы из вариантов синхронизации по понятным причинам.
Edit:
crypto_alloc_hash является синхронным хэш, и я не мог узнать разницу между хэш и Шаш.
Оба возвращают выделенную рукоятку шифрования в случае успеха; IS_ERR является истинным в случае ошибки, PTR_ERR возвращает код ошибки.
См. shash vs hash.
Почему вы должны угадывать?Почему вы не смотрите на документацию? – sjsam
Я не могу найти документацию об этом. –
Ты прав. Многие из apis, используемые в ядре Linux, плохо документированы. Но стоит попробовать посмотреть исходные файлы. Иногда документация приходит в виде комментариев. – sjsam