reading /dev /urandom 스레드-안전입니까?
-
02-07-2019 - |
문제
이것은 코드입니다.
unsigned int number;
FILE* urandom = fopen("/dev/urandom", "r");
if (urandom) {
size_t bytes_read = fread(&number, 1, sizeof(number), urandom);
DCHECK(bytes_read == sizeof(number));
fclose(urandom);
} else {
NOTREACHED();
}
그렇지 않다면 어떻게 스레드 안전을 만들까요?
해결책
함수의 각 실행이 자체 스레드에있는 한 (즉, 로컬 변수 number
, urandom
, bytes_read
스레드간에 공유되지 않음), 나는 스레드 안전 문제가 없다. 그런 다음 각 스레드는 자체 파일 디스크립터를 갖습니다. /dev/urandom
. /dev/urandom
여러 프로세스에서 동시에 열 수 있으므로 괜찮습니다.
그런데, /dev/urandom
열리지 않을 수 있으며 코드가 처리해야합니다. 일부 원인은 다음과 같습니다. 사용 가능한 파일 설명자가 부족합니다. /dev
제대로 장착되지 않았습니다 (이 경우 더 큰 문제가 있지만); 귀하의 프로그램은 특별한 상태로 진행됩니다 chroot
모든 장치에 대한 액세스를 거부합니다. 등.
제휴하지 않습니다 StackOverflow