IceWalkers.com - Linux Software downloads and news
Name : Password :
Linux SoftwareLinux RPMLinux HowtosLink UsAboutAdvertise

futex (2)

FUTEX(2)                                                              FUTEX(2)



NAME
       futex - Fast Userspace Locking system call

SYNOPSIS
       #include<linux/futex.h>

       #include<sys/time.h>

       intsys_futex(void*futex,int  op,int val,conststructtimespec
       *timeout);

DESCRIPTION
       The sys_futex system call provides a method for a program to wait for a
       value  at  a  given  address  to change, and a method to wake up anyone
       waiting on a particular address (while the addresses for the same  mem-
       ory in separate processes may not be equal, the kernel maps them inter-
       nally so the same memory mapped in different locations will  correspond
       for  sys_futex calls).  It is typically used to implement the contended
       case of a lock in shared memory, as described in futex(4).

       When a futex(4) operation did not finish uncontended  in  userspace,  a
       call  needs  to  be  made  to  the kernel to arbitrate. Arbitration can
       either mean putting the calling process to sleep or, conversely, waking
       a waiting process.

       Callers of this function are expected to adhere to the semantics as set
       out in futex(4). As these semantics involve writing non-portable assem-
       bly  instructions,  this in turn probably means that most users will in
       fact be library authors and not general application developers.

       The futex argument needs to point to an aligned  integer  which  stores
       the  counter.  The operation to execute is passed via the op parameter,
       along with a value val.

       Three operations are currently defined:

       FUTEX_WAIT
              This operation atomically verifies that the futex address  still
              contains the value given, and sleeps awaiting FUTEX_WAKE on this
              futex address.  If the timeout argument is  non-NULL,  its  con-
              tents  describe the maximum duration of the wait, which is infi-
              nite otherwise.  For futex(4), this call is executed  if  decre-
              menting the count gave a negative value (indicating contention),
              and will sleep until another process   releases  the  futex  and
              executes the FUTEX_WAKE operation.

       FUTEX_WAKE
              This operation wakes at most val processes waiting on this futex
              address (ie. inside FUTEX_WAIT).  For futex(4), this is executed
              if  incrementing  the count showed that there were waiters, once
              the futex value has been set to 1 (indicating that it is  avail-
              able).

       FUTEX_FD
              To  support  a asynchronous wakeups, this operation associates a
              file descriptor with a futex.  If  another  process  executes  a
              FUTEX_WAKE,  the process will receive the signal number that was
              passed in val. The calling process must close the returned  file
              descriptor after use.

              To  prevent race conditions, the caller should test if the futex
              has been upped after FUTEX_FD returns.

RETURNVALUE
       Depending on which operation was executed, the returned value can  have
       differing meanings.

       FUTEX_WAIT
              Returns 0 if the process was woken by a FUTEX_WAKE call. In case
              of timeout, ETIMEDOUT is returned. If the futex was not equal to
              the  expected  value, the operation returns EWOULDBLOCK. Signals
              (or other spurious wakeups) cause FUTEX_WAIT to return EINTR.

       FUTEX_WAKE
              Returns the number of processes woken up.

       FUTEX_FD
              Returns the new file descriptor associated with the futex.

NOTES
       To reiterate, bare futexes are not intended as an easy to use  abstrac-
       tion  for  end-users. Implementors are expected to be assembly literate
       and to have read the sources of the futex userspace library  referenced
       below.

AUTHORS
       Futexes  were  designed and worked on by Hubertus Franke (IBM Thomas J.
       Watson Research Center), Matthew Kirkwood, Ingo Molnar  (Red  Hat)  and
       Rusty  Russell (IBM Linux Technology Center). This page written by bert
       hubert.

VERSIONS
       Initial futex support was merged in  Linux  2.5.7  but  with  different
       semantics  from those described above.  Current semantics are available
       from Linux 2.5.40 onwards.

SEEALSO
       futex(4), 'Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux'
       (proceedings  of  the  Ottawa  Linux  Symposium  2002),  futex  example
       library,  futex-*.tar.bz2  <URL:ftp://ftp.nl.kernel.org:/pub/linux/ker-
       nel/people/rusty/>.



                               31 December 2002                       FUTEX(2)

_Exitgetsockoptoutwshmat
_exitgettidoutw_pshmctl
_llseekgettimeofdaypauseshmdt
_newselectgetuidpersonalityshmget
_sysctlgttypipeshmop
acceptidlepivot_rootshutdown
accessinbpollsigaction
acctinb_pprctlsigaltstack
adjtimexinlpreadsigblock
afs_syscallinl_pprofsiggetmask
alarminsbpselectsigmask
alloc_hugepagesinslptracesignal
arch_prctlinswpwritesigpause
bdflushintroquotactlsigpending
bindinwreadsigprocmask
breakinw_preaddirsigqueue
brkioctlreadlinksigreturn
cacheflushioctl_listreadvsigsetmask
capgetiopermrebootsigsuspend
capsetioplrecvsigtimedwait
chdiripcrecvfromsigvec
chmodkillrecvmsgsigwaitinfo
chownkillpgrenamesocket
chrootlchownrmdirsocketcall
clonelinksbrksocketpair
closelistensched_get_priority_maxssetmask
connectllseeksched_get_priority_minstat
creatlocksched_getaffinitystatfs
duplseeksched_getparamstime
dup2lstatsched_getschedulerstty
execvemadvisesched_rr_get_intervalswapoff
exitmincoresched_setaffinityswapon
fchdirmkdirsched_setparamsymlink
fchmodmknodsched_setschedulersync
fchownmlocksched_yieldsyscall
fcntlmlockallselectsyscalls
fdatasyncmmapselect_tutsysctl
flockmmap2semctlsysfs
forkmodify_ldtsemgetsysinfo
free_hugepagesmountsemopsyslog
fstatmprotectsendtime
fstatfsmpxsendfiletimes
fsyncmremapsendmsgtkill
ftruncatemsgctlsendtotruncate
futexmsggetsetcontextumask
getcontextmsgopsetdomainnameumount
getdentsmsgrcvsetegidumount2
getdomainnamemsgsndseteuiduname
getdtablesizemsyncsetfsgidundocumented
getegidmunlocksetfsuidunimplemented
geteuidmunlockallsetgidunlink
getgidmunmapsetgroupsuselib
getgroupsnanosleepsethostidustat
gethostidnfsservctlsethostnameutime
gethostnamenicesetitimerutimes
getitimerobsoletesetpgidvfork
getpagesizeoldfstatsetpgrpvhangup
getpeernameoldlstatsetpriorityvm86
getpgidoldoldunamesetregidwait
getpgrpoldstatsetresgidwait3
getpidoldunamesetresuidwait4
getppidopensetreuidwaitpid
getpriorityoutbsetrlimitwrite
getresgidoutb_psetsidwritev
getresuidoutlsetsockopt 
getrlimitoutl_psettimeofday 
getrusageoutsbsetuid 
getsidoutslsetup 


Inkscape 0.47
Vector graphic editor for SVG
DeleGate 9.9.6-pre5
Proxy server which runs on multiple platforms
Nano 2.1.99pre2
Emulate Pico while also offering a few enhancements.
My Money 2.0.49
Personal financial software
Linux Kernel 2.6 2.6.32-rc8
Linux Kernel
GCstar 1.5.0
Personal collections manager
ImageMagick 6.5.7.9
ImageMagick image processing studio
BibleTime 2.4
Bible study software for Linux / KDE
Tellico 2.1.1
Collection manager for books, music, videos, and bibliographies
Totem 2.28.4
Movie player for Gnome
Free IT Magazines, White Papers, eBooks, and more !
Oracle Magazine

Contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more.

Vulnerability Management for Dummies

Get all the Facts and See How to Implement a Successful Vulnerability Management Program.

Website Magazine

Has tapped premier talent in the Internet industry for our content and each and every issue will contain practical advice and insights for website owners.

Linux Software Map
Find Linux RPM
Best Rated Linux Software
Most Rated Linux Software
Linux Distributions
Linux Howtos
Quick Survey

Please take our survey and help us improve our website to serve you better.

Thank you.
Linux Software
Linux / IT Resources
Site Resources
Google
Privacy Policy
Contact Us
Submit Software
Advertising info