Sign in
nginx
/
nginx
/
b14b91020284baf090b40bdb6ba87b99751f27fb
/
.
/
src
/
event
/
ngx_event_spinlock.c
blob: 58edb2af5abb1a21b7eb1ad1fdecdf49a36336db [
file
]
void
_spinlock
(
ngx_atomic_t
*
lock
)
{
ngx_int_t
tries
;
tries
=
0
;
for
(
;;
)
{
if
(*
lock
)
{
if
(
ngx_ncpu
>
1
&&
tries
++
<
1000
)
{
continue
;
}
sched_yield
();
tries
=
0
;
}
else
{
if
(
ngx_atomic_cmp_set
(
lock
,
0
,
1
))
{
return
;
}
}
}
}