source: trunk/src/qt3support/tools/q3semaphore.cpp@ 318

Last change on this file since 318 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 6.8 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the Qt3Support module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "q3semaphore.h"
43
44#include "qmutex.h"
45#include "qwaitcondition.h"
46
47QT_BEGIN_NAMESPACE
48
49/*!
50 \class Q3Semaphore
51 \threadsafe
52 \brief The Q3Semaphore class provides a robust integer semaphore.
53
54 \compat
55
56 A Q3Semaphore can be used to serialize thread execution, in a
57 similar way to a QMutex. A semaphore differs from a mutex, in
58 that a semaphore can be accessed by more than one thread at a
59 time.
60
61 For example, suppose we have an application that stores data in a
62 large tree structure. The application creates 10 threads
63 (commonly called a thread pool) to perform searches on the tree.
64 When the application searches the tree for some piece of data, it
65 uses one thread per base node to do the searching. A semaphore
66 could be used to make sure that two threads don't try to search
67 the same branch of the tree at the same time.
68
69 A non-computing example of a semaphore would be dining at a
70 restaurant. A semaphore is initialized to have a maximum count
71 equal to the number of chairs in the restaurant. As people
72 arrive, they want a seat. As seats are filled, the semaphore is
73 accessed, once per person. As people leave, the access is
74 released, allowing more people to enter. If a party of 10 people
75 want to be seated, but there are only 9 seats, those 10 people
76 will wait, but a party of 4 people would be seated (taking the
77 available seats to 5, making the party of 10 people wait longer).