mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-01 14:43:48 +01:00
Reverting r12850...hopefully
Never removed one before, but I'm pretty sure it is correct.
This commit is contained in:
@@ -1,73 +1,73 @@
|
||||
/* SoX Resampler Library Copyright (c) 2007-12 robs@users.sourceforge.net
|
||||
* Licence for this file: LGPL v2.1 See LICENCE for details. */
|
||||
|
||||
/* Concurrent Control with "Readers" and "Writers", P.J. Courtois et al, 1971 */
|
||||
|
||||
#if !defined ccrw2_included
|
||||
#define ccrw2_included
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#if defined _OPENMP
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
typedef struct {
|
||||
int readcount, writecount; /* initial value = 0 */
|
||||
omp_lock_t mutex_1, mutex_2, mutex_3, w, r; /* initial value = 1 */
|
||||
} ccrw2_t; /* Problem #2: `writers-preference' */
|
||||
|
||||
#define ccrw2_become_reader(p) do {\
|
||||
omp_set_lock(&p.mutex_3);\
|
||||
omp_set_lock(&p.r);\
|
||||
omp_set_lock(&p.mutex_1);\
|
||||
if (++p.readcount == 1) omp_set_lock(&p.w);\
|
||||
omp_unset_lock(&p.mutex_1);\
|
||||
omp_unset_lock(&p.r);\
|
||||
omp_unset_lock(&p.mutex_3);\
|
||||
} while (0)
|
||||
#define ccrw2_cease_reading(p) do {\
|
||||
omp_set_lock(&p.mutex_1);\
|
||||
if (!--p.readcount) omp_unset_lock(&p.w);\
|
||||
omp_unset_lock(&p.mutex_1);\
|
||||
} while (0)
|
||||
#define ccrw2_become_writer(p) do {\
|
||||
omp_set_lock(&p.mutex_2);\
|
||||
if (++p.writecount == 1) omp_set_lock(&p.r);\
|
||||
omp_unset_lock(&p.mutex_2);\
|
||||
omp_set_lock(&p.w);\
|
||||
} while (0)
|
||||
#define ccrw2_cease_writing(p) do {\
|
||||
omp_unset_lock(&p.w);\
|
||||
omp_set_lock(&p.mutex_2);\
|
||||
if (!--p.writecount) omp_unset_lock(&p.r);\
|
||||
omp_unset_lock(&p.mutex_2);\
|
||||
} while (0)
|
||||
#define ccrw2_init(p) do {\
|
||||
omp_init_lock(&p.mutex_1);\
|
||||
omp_init_lock(&p.mutex_2);\
|
||||
omp_init_lock(&p.mutex_3);\
|
||||
omp_init_lock(&p.w);\
|
||||
omp_init_lock(&p.r);\
|
||||
} while (0)
|
||||
#define ccrw2_clear(p) do {\
|
||||
omp_destroy_lock(&p.r);\
|
||||
omp_destroy_lock(&p.w);\
|
||||
omp_destroy_lock(&p.mutex_3);\
|
||||
omp_destroy_lock(&p.mutex_2);\
|
||||
omp_destroy_lock(&p.mutex_1);\
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
typedef int ccrw2_t;
|
||||
#define ccrw2_become_reader(x) (void)(x)
|
||||
#define ccrw2_cease_reading(x) (void)(x)
|
||||
#define ccrw2_become_writer(x) (void)(x)
|
||||
#define ccrw2_cease_writing(x) (void)(x)
|
||||
#define ccrw2_init(x) (void)(x)
|
||||
#define ccrw2_clear(x) (void)(x)
|
||||
|
||||
#endif /* _OPENMP */
|
||||
|
||||
#endif
|
||||
/* SoX Resampler Library Copyright (c) 2007-12 robs@users.sourceforge.net
|
||||
* Licence for this file: LGPL v2.1 See LICENCE for details. */
|
||||
|
||||
/* Concurrent Control with "Readers" and "Writers", P.J. Courtois et al, 1971 */
|
||||
|
||||
#if !defined ccrw2_included
|
||||
#define ccrw2_included
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#if defined _OPENMP
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
typedef struct {
|
||||
int readcount, writecount; /* initial value = 0 */
|
||||
omp_lock_t mutex_1, mutex_2, mutex_3, w, r; /* initial value = 1 */
|
||||
} ccrw2_t; /* Problem #2: `writers-preference' */
|
||||
|
||||
#define ccrw2_become_reader(p) do {\
|
||||
omp_set_lock(&p.mutex_3);\
|
||||
omp_set_lock(&p.r);\
|
||||
omp_set_lock(&p.mutex_1);\
|
||||
if (++p.readcount == 1) omp_set_lock(&p.w);\
|
||||
omp_unset_lock(&p.mutex_1);\
|
||||
omp_unset_lock(&p.r);\
|
||||
omp_unset_lock(&p.mutex_3);\
|
||||
} while (0)
|
||||
#define ccrw2_cease_reading(p) do {\
|
||||
omp_set_lock(&p.mutex_1);\
|
||||
if (!--p.readcount) omp_unset_lock(&p.w);\
|
||||
omp_unset_lock(&p.mutex_1);\
|
||||
} while (0)
|
||||
#define ccrw2_become_writer(p) do {\
|
||||
omp_set_lock(&p.mutex_2);\
|
||||
if (++p.writecount == 1) omp_set_lock(&p.r);\
|
||||
omp_unset_lock(&p.mutex_2);\
|
||||
omp_set_lock(&p.w);\
|
||||
} while (0)
|
||||
#define ccrw2_cease_writing(p) do {\
|
||||
omp_unset_lock(&p.w);\
|
||||
omp_set_lock(&p.mutex_2);\
|
||||
if (!--p.writecount) omp_unset_lock(&p.r);\
|
||||
omp_unset_lock(&p.mutex_2);\
|
||||
} while (0)
|
||||
#define ccrw2_init(p) do {\
|
||||
omp_init_lock(&p.mutex_1);\
|
||||
omp_init_lock(&p.mutex_2);\
|
||||
omp_init_lock(&p.mutex_3);\
|
||||
omp_init_lock(&p.w);\
|
||||
omp_init_lock(&p.r);\
|
||||
} while (0)
|
||||
#define ccrw2_clear(p) do {\
|
||||
omp_destroy_lock(&p.r);\
|
||||
omp_destroy_lock(&p.w);\
|
||||
omp_destroy_lock(&p.mutex_3);\
|
||||
omp_destroy_lock(&p.mutex_2);\
|
||||
omp_destroy_lock(&p.mutex_1);\
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
typedef int ccrw2_t;
|
||||
#define ccrw2_become_reader(x) (void)(x)
|
||||
#define ccrw2_cease_reading(x) (void)(x)
|
||||
#define ccrw2_become_writer(x) (void)(x)
|
||||
#define ccrw2_cease_writing(x) (void)(x)
|
||||
#define ccrw2_init(x) (void)(x)
|
||||
#define ccrw2_clear(x) (void)(x)
|
||||
|
||||
#endif /* _OPENMP */
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user