문제

이것은 코드입니다.

  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 모든 장치에 대한 액세스를 거부합니다. 등.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top