rand() is racy in multi-threaded programs?
Andriy Gapon
avg at FreeBSD.org
Thu Dec 3 07:34:01 UTC 2020
On 03/12/2020 01:20, Conrad Meyer wrote:
> Hi Andriy,
>
> Rand(3) is explicitly unsafe to use from concurrent threads without some
> external serialization, even after initialization. I’d suggest using a different
> API.
Conrad,
thank you!
Just want to check, unsafe in terms of bogus results (with respect to
randomness) or unsafe as in may crash?
> On Wed, Dec 2, 2020 at 13:53 Andriy Gapon <avg at freebsd.org
> <mailto:avg at freebsd.org>> wrote:
>
>
> Specifically, concurrent "first" calls to rand().
> There can be a moment when rand3_state is allocated but not completely set up
> with initstate_r().
> Is this a known / documented issue?
> Should we try to do better?
>
> P.S.
> I am seeing this issue from time to time when running ztest program (from ZFS).
> I guess that it uses rand() just because that's what OpenZFS did / does on
> illumos and Linux.
>
> P.P.S.
> Just realized that the problem can be relatively recent.
> https://svnweb.freebsd.org/base?view=revision&revision=357382
>
> --
> Andriy Gapon
>
--
Andriy Gapon
More information about the freebsd-current
mailing list