Sign in
nginx
/
nginx
/
b14169a714bb3deeb7f4912a58238f7a54aeecd1
/
.
/
src
/
event
/
ngx_event_spinlock.c
blob: 58edb2af5abb1a21b7eb1ad1fdecdf49a36336db [
file
] [
log
] [
blame
]
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
;
}
}
}
}