File: semaphor.tex

package info (click to toggle)
wxwidgets2.8 2.8.10.1-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 239,052 kB
  • ctags: 289,550
  • sloc: cpp: 1,838,857; xml: 396,717; python: 282,506; ansic: 126,171; makefile: 51,406; sh: 14,581; asm: 299; sql: 258; lex: 194; perl: 139; yacc: 128; pascal: 95; php: 39; lisp: 38; tcl: 24; haskell: 20; java: 18; cs: 18; erlang: 17; ruby: 16; ada: 9; ml: 9; csh: 9
file content (134 lines) | stat: -rw-r--r-- 4,676 bytes parent folder | download | duplicates (3)
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Name:        semaphore.tex
%% Purpose:     wxSemaphore documentation
%% Author:      Vadim Zeitlin
%% Modified by:
%% Created:     02.04.02
%% RCS-ID:      $Id: semaphor.tex 36199 2005-11-19 01:07:56Z MR $
%% Copyright:   (c) 2002 Vadim Zeitlin
%% License:     wxWindows license
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{\class{wxSemaphore}}\label{wxsemaphore}

wxSemaphore is a counter limiting the number of threads concurrently accessing
a shared resource. This counter is always between $0$ and the maximum value
specified during the semaphore creation. When the counter is strictly greater
than $0$, a call to \helpref{Wait}{wxsemaphorewait} returns immediately and
decrements the counter. As soon as it reaches $0$, any subsequent calls to
\helpref{Wait}{wxsemaphorewait} block and only return when the semaphore
counter becomes strictly positive again as the result of calling 
\helpref{Post}{wxsemaphorepost} which increments the counter.

In general, semaphores are useful to restrict access to a shared resource
which can only be accessed by some fixed number of clients at the same time. For
example, when modeling a hotel reservation system a semaphore with the counter
equal to the total number of available rooms could be created. Each time a room
is reserved, the semaphore should be acquired by calling 
\helpref{Wait}{wxsemaphorewait} and each time a room is freed it should be
released by calling \helpref{Post}{wxsemaphorepost}.

\wxheading{Derived from}

No base class

\wxheading{Include files}

<wx/thread.h>

\latexignore{\rtfignore{\wxheading{Members}}}

\membersection{wxSemaphore::wxSemaphore}\label{wxsemaphorewxsemaphore}

\func{}{wxSemaphore}{\param{int }{initialcount = 0}, \param{int }{maxcount = 0}}

Specifying a {\it maxcount} of $0$ actually makes wxSemaphore behave as if
there is no upper limit. If maxcount is $1$, the semaphore behaves exactly as a
mutex.

{\it initialcount} is the initial value of the semaphore which must be between
$0$ and {\it maxcount} (if it is not set to $0$).

\membersection{wxSemaphore::\destruct{wxSemaphore}}\label{wxsemaphoredtor}

\func{}{\destruct{wxSemaphore}}{\void}

Destructor is not virtual, don't use this class polymorphically.

\membersection{wxSemaphore::Post}\label{wxsemaphorepost}

\func{wxSemaError }{Post}{\void}

Increments the semaphore count and signals one of the waiting
threads in an atomic way. Returns wxSEMA\_OVERFLOW if the count
would increase the counter past the maximum.

\wxheading{Return value}

One of:

\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf wxSEMA\_NO\_ERROR}}{There was no error.}
\twocolitem{{\bf wxSEMA\_INVALID}}{Semaphore hasn't been initialized successfully.}
\twocolitem{{\bf wxSEMA\_OVERFLOW}}{Post() would increase counter past the max.}
\twocolitem{{\bf wxSEMA\_MISC\_ERROR}}{Miscellaneous error.}
\end{twocollist}


\membersection{wxSemaphore::TryWait}\label{wxsemaphoretrywait}

\func{wxSemaError }{TryWait}{\void}

Same as \helpref{Wait()}{wxsemaphorewait}, but returns immediately.

\wxheading{Return value}

One of:

\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf wxSEMA\_NO\_ERROR}}{There was no error.}
\twocolitem{{\bf wxSEMA\_INVALID}}{Semaphore hasn't been initialized successfully.}
\twocolitem{{\bf wxSEMA\_BUSY}}{Returned by TryWait() if Wait() would block, i.e. the count is zero.}
\twocolitem{{\bf wxSEMA\_MISC\_ERROR}}{Miscellaneous error.}
\end{twocollist}


\membersection{wxSemaphore::Wait}\label{wxsemaphorewait}

\func{wxSemaError }{Wait}{\void}

Wait indefinitely until the semaphore count becomes strictly positive
and then decrement it and return.

\wxheading{Return value}

One of:

\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf wxSEMA\_NO\_ERROR}}{There was no error.}
\twocolitem{{\bf wxSEMA\_INVALID}}{Semaphore hasn't been initialized successfully.}
\twocolitem{{\bf wxSEMA\_MISC\_ERROR}}{Miscellaneous error.}
\end{twocollist}

\membersection{wxSemaphore::WaitTimeout}\label{wxsemaphorewaittimeout}

\func{wxSemaError }{WaitTimeout}{\param{unsigned
long}{timeout\_millis}}

Same as \helpref{Wait()}{wxsemaphorewait}, but with a timeout
limit.

\wxheading{Return value}

One of:

\twocolwidtha{7cm}
\begin{twocollist}\itemsep=0pt
\twocolitem{{\bf wxSEMA\_NO\_ERROR}}{There was no error.}
\twocolitem{{\bf wxSEMA\_INVALID}}{Semaphore hasn't been initialized successfully.}
\twocolitem{{\bf wxSEMA\_TIMEOUT}}{Timeout occurred without receiving semaphore.}
\twocolitem{{\bf wxSEMA\_MISC\_ERROR}}{Miscellaneous error.}
\end{twocollist}