/[svn]/linuxsampler/trunk/src/common/Mutex.h
ViewVC logotype

Annotation of /linuxsampler/trunk/src/common/Mutex.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 880 - (hide annotations) (download) (as text)
Tue Jun 27 22:57:37 2006 UTC (17 years, 9 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 3949 byte(s)
just some refactoring work:
- renamed class LinuxSamplerException -> Exception
- encapsulated LS API relevant files into LS namespace
- removed unnecessary header inclusions

1 schoenebeck 53 /***************************************************************************
2     * *
3     * LinuxSampler - modular, streaming capable sampler *
4     * *
5 schoenebeck 56 * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck *
6 schoenebeck 880 * Copyright (C) 2005, 2006 Christian Schoenebeck *
7 schoenebeck 53 * *
8     * This program is free software; you can redistribute it and/or modify *
9     * it under the terms of the GNU General Public License as published by *
10     * the Free Software Foundation; either version 2 of the License, or *
11     * (at your option) any later version. *
12     * *
13     * This program is distributed in the hope that it will be useful, *
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16     * GNU General Public License for more details. *
17     * *
18     * You should have received a copy of the GNU General Public License *
19     * along with this program; if not, write to the Free Software *
20     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21     * MA 02111-1307 USA *
22     ***************************************************************************/
23    
24     #ifndef __MUTEX_H__
25     #define __MUTEX_H__
26    
27     #include <pthread.h>
28    
29 schoenebeck 880 namespace LinuxSampler {
30    
31 schoenebeck 550 /** @brief Mutual exclusive objects
32     *
33     * This class provides the classical thread / process synchronisation
34     * technique called Mutex. It is used to protect critical sections, that is
35     * resources (typically data structures) from being used at the same time by
36     * different threads or processes which otherwise might turn into undefined
37     * and of course undesired behavior.
38     *
39     * Note: as this technique might block the calling thread and also implies
40     * a system call, this should not be used directly in realtime sensitive
41     * threads!
42     */
43 schoenebeck 53 class Mutex {
44     public:
45 schoenebeck 550 /**
46     * Constructor
47     */
48 schoenebeck 53 Mutex();
49 schoenebeck 550
50     /**
51     * Destructor
52     */
53     virtual ~Mutex();
54    
55     /** @brief Lock this Mutex.
56     *
57     * If this Mutex object is currently be locked by another thread,
58     * then the calling thread will be blocked until the other thread
59     * unlocks this Mutex object. The calling thread though can safely
60     * call this method several times without danger to be blocked
61     * himself.
62     *
63     * The calling thread should call Unlock() as soon as the critical
64     * section was left.
65     */
66 schoenebeck 53 void Lock();
67 schoenebeck 550
68     /** @brief Try to lock this Mutex.
69     *
70     * Same as Lock() except that this method won't block the calling
71     * thread in case this Mutex object is currently locked by another
72     * thread. So this call will always immediately return and the
73     * return value has to be checked if the locking request was
74     * successful or not.
75     *
76     * @returns true if the Mutex object could be locked, false if the
77     * Mutex is currently locked by another thread
78     */
79 senkov 165 bool Trylock();
80 schoenebeck 550
81     /** @brief Unlock this Mutex.
82     *
83     * If other threads are currently blocked and waiting due to a
84     * Lock() call, one of them will be awaken.
85     */
86 schoenebeck 53 void Unlock();
87 schoenebeck 550
88 schoenebeck 53 protected:
89     pthread_mutex_t __posix_mutex;
90     pthread_mutexattr_t __posix_mutexattr;
91     };
92    
93 schoenebeck 880 } // namespace LinuxSampler
94    
95 schoenebeck 53 #endif // __MUTEX_H__

  ViewVC Help
Powered by ViewVC