1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
|
.\" Page by b.hubert - may be freely modified and distributed
.\"
.\" Niki A. Rahimi (LTC Security Development, narahimi@us.ibm.com)
.\" added ERRORS section.
.\"
.\" Modified 2004-06-17 mtk
.\" Modified 2004-10-07 aeb, added FUTEX_REQUEUE, FUTEX_CMP_REQUEUE
.\"
.\" FIXME
.\" 2.6.14 adds FUTEX_WAKE_OP
.\" 2.6.18 adds (Ingo Molnar) priority inheritance support:
.\" FUTEX_LOCK_PI, FUTEX_UNLOCK_PI, and FUTEX_TRYLOCK_PI. These need
.\" to be documented in the manual page. Probably there is sufficient
.\" material in the kernel source file Documentation/pi-futex.txt.
.\" 2.6.25 adds FUTEX_WAKE_BITSET, FUTEX_WAIT_BITSET
.\"
.\" Japanese Version Copyright(C) 2003 Suzuki Takashi
.\" all rights reserved.
.\" Translated Fri Oct 24 10:37:10 JST 2003
.\" by Suzuki Takashi.
.\" Updated & Modified Sat Feb 5 14:28:53 JST 2005
.\" by Yuichi SATO <ysato444@yahoo.co.jp>, LDP v2.01
.\" Updated & Modified Wed Jan 3 04:51:22 JST 2007 by Yuichi SATO, LDP v2.43
.\"
.\"WORD: integer int ѿ
.\"WORD: sleep Ԥ
.\"WORD: wake
.\"WORD: wake up
.\"
.TH FUTEX 2 2008-11-27 "Linux" "Linux Programmer's Manual"
.SH ̾
futex \- ®桼֥åΥƥॳ
.SH
.nf
.sp
.B "#include <linux/futex.h>"
.B "#include <sys/time.h>"
.sp
.BI "int futex(int *" uaddr ", int " op ", int " val \
", const struct timespec *" timeout ,
.br
.BI " int *" uaddr2 ", int " val3 );
.\" int *? void *? u32 *?
.fi
.SH
.PP
.BR futex ()
ƥॳϡ
ꤷɥ쥹ͤѹΤץबԤļʤ
Υɥ쥹ФԵΥץ wake () ʤ
(ץۤʤƱФ륢ɥ쥹ƱǤϤʤ⤷ʤ
ͥϰۤʤ֤˥ޥåפ줿Ʊ
.BR futex ()
ǻȤ褦ǥޥåפ)
ŵŪˤϡfutex
.BR futex (7)
˵Ƥ褦ˡ
ͭΥå礹νΤѤ롣
.PP
.BR futex (7)
桼֤Ƕʤλʤä硢
ͥۤ뤿˥ƥॳƤɬפ롣
ۤȤΤϡƤӽФץ sleep (Ԥ) ꡢȿФ
Ԥץ wake ꤹ뤳Ȥ̣롣
.PP
δؿƤӽФץ
.BR futex (7)
˵ҤƤ륻ޥƥ¤Ǥ뤳Ȥᤵ롣
ΥޥƥˤϰܿԲǽʥ֥̿Ȥޤޤ롣
ΤȤϸ futex Υ桼ΤۤȤɤϼºݤϥ饤֥κԤǤꡢ
̥ץꥱγȯԤǤϤʤȤȤǤ롣
.PP
.I uaddr
ϡǼ롢
饤Ȥ·ä int ѿؤƤɬפ롣
¹Ԥ
.I op
𤷤ơ
.I val
ȤȤϤ롣
.PP
ߤΤȤ 5 ĤƤ:
.TP
.B FUTEX_WAIT
futex ɥ쥹
.I uaddr
˻ꤵ줿
.I val
ޤǼƤ뤫ɤԲʬǸڤ
sleep ֤
futex ɥ쥹Ф
.B FUTEX_WAKE
¹ԤΤԤġ
.I timeout
NULL Ǥʤ硢Ƥ
Ԥ֤κͤɽNULL ξ̵ɽ
.I uaddr2
.I val3
̵뤵롣
.BR futex (7)
˾Ȥ餷碌ȡθƤӽФ
ȤΥǥȤ (ɽ) ˤʤä˼¹Ԥ졢
̤Υץ futex
.B FUTEX_WAKE
¹Ԥޤ sleep 롣
.TP
.B FUTEX_WAKE
Ǥϻꤷ futex ɥ쥹ФԤ֤
(ʤ
.B FUTEX_WAIT
) \fIval\fP ĤΥץ wake 롣
.IR timeout ,
.IR uaddr2 ,
.I val3
̵뤵롣
\fBfutex\fR(4) ˾Ȥ餷碌ȡ
ȤΥȤԤץȽ
futex ͤ 1 ꤵ줿 (ѲǽǤ뤳Ȥɽ) ˼¹Ԥ롣
.TP
.BR FUTEX_FD " (Linux 2.6.25 )"
Ʊ wake б뤿ᡢϥեǥץ futex
ϢŤ롣
.\" .BR poll (2)
.\" ŬƤ롣
̤Υץ
.B FUTEX_WAKE
¹Ԥȡץ
.I val
Ϥ줿ʥֹΥʥ롣
ƤӽФץϻѸ塢֤줿եǥץ
ʤФʤʤ
.IR timeout ,
.IR uaddr2 ,
.I val3
̵뤵롣
֤ɻߤ뤿ᡢƤӽФץ
.B FUTEX_FD
֤ä
futex up 줿ɤǧʤФʤʤ
.\" FIXME . Check that this flag does eventually get removed.
.B FUTEX_FD
ϤȤȶ礬䤹äᡢ
Linux 2.6.26 ʹߤǺƤ롣
.TP
.BR FUTEX_REQUEUE " (Linux 2.5.70 ʹ)"
ϡ
.B FUTEX_WAKE
ȤƤơ wake ƤƤΥץ
¾ futex ɬפˡ
ֽäη˽ (thundering herd)̤뤿Ƴ줿
θƤӽФ
.I val
ĤΥץ wake ɥ쥹
.I uaddr2
futex ԤäƤ¾ƤΥץ٥塼ˤ롣
.I timeout
.I val3
̵뤵롣
.TP
.BR FUTEX_CMP_REQUEUE " (Linux 2.6.7 ʹ)"
ΰդ
.B FUTEX_REQUEUE
Ȥ˶礬뤿ᡢ
.B FUTEX_CMP_REQUEUE
Ƴ줿
.B FUTEX_REQUEUE
ȻƤ뤬
.I uaddr
.I val3
ޤݻƤ뤫ǽ˥å롣
ݻƤʤ硢ϥ顼
.B EAGAIN
ǼԤ롣
.I timeout
̵뤵롣
.SH ֤
.PP
ɤ¹Ԥ줿ˤäơ
֤ͤΰ̣Ѥ롣
.TP
.B FUTEX_WAIT
ץ
.B FUTEX_WAKE
θƤӽФ wake 0 ֤
ॢȤξ硢ϥ顼
.B ETIMEOUT
ǼԤ롣
futex ꤵ줿ͤʤ硢
顼
.B EWOULDBLOCK
ǼԤ롣
ʥ뤫
.RB ( signal (7)
) ¾ε wake äˤϡ顼
.B EINTR
ǼԤ롣
.TP
.B FUTEX_WAKE
wake ץο֤
.TP
.B FUTEX_FD
futex ˴ϢŤ줿ʥեǥץ֤
.TP
.B FUTEX_REQUEUE
wake ץο֤
.TP
.B FUTEX_CMP_REQUEUE
wake ץο֤
.PP
顼ξ硢Ƥ \-1 ֤ꡢ
.I errno
顼Ƥͤꤵ롣
.SH 顼
.TP
.B EACCES
futex ɤ߹ߥʤä
.TP
.B EAGAIN
.B FUTEX_CMP_REQUEUE
ͽʤ futex ͤĤä
(϶Ƥ뤫⤷ʤ
ξϰ
.B FUTEX_WAKE
Ȥ)
.TP
.B EFAULT
桼֤
.I timeout
ξݤ˥顼ȯ
.TP
.B EINVAL
Ƥʤޤϥڡ饤Ȥǥ顼ȯ
.TP
.B ENFILE
ץƤեƥ¤ã
.TP
.B ENOSYS
.I op
̵ꤵ줿
.SH С
.PP
ǽ futex б Linux 2.5.7 Ȥ߹ޤ줿
嵭ΥޥƥȤϰۤʤ롣
ǼƤ륻ޥƥ
4 ĤΰΥƥॳϡLinux 2.5.40 Ƴ줿
Linux 2.5.70 Ǥ 1 Ĥΰɲä줿
Linux 2.6.7 Ǥ 6 ܤΰɲä줿
ϱs390 ƥ̤ΤΤǤ롣
.SH
Υƥॳ Linux ȼǤ롣
.SH
.PP
֤ futex ϥɥ桼ưפ˻ȤȤΤǤ복ǰȤ
տޤ줿ΤǤϤʤ
(glibc ˤϤΥƥॳФåѡؿϤʤ)
Ԥϡ֥˴Ƥꡢʲ˵ futex 桼֥饤֥
ɤ߽Ƥ뤳Ȥᤵ롣
.\" .SH
.\" .PP
.\" futex Hubertus Franke (IBM Thomas J. Watson Research Center),
.\" Matthew Kirkwood, Ingo Molnar (Red Hat),
.\" Rusty Russell (IBM Linux Technology Center) ߷פ
.\" Υڡ bert hubert
.SH Ϣ
.BR futex (7)
.PP
\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP
(proceedings of the Ottawa Linux Symposium 2002),
futex λ饤֥, futex-*.tar.bz2
<URL:ftp://ftp.nl.kernel.org/pub/linux/kernel/people/rusty/>.
|