Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
 1// SPDX-License-Identifier: GPL-2.0
 2#include <stdio.h>
 3#include <pthread.h>
 4
 5pthread_mutex_t a = PTHREAD_MUTEX_INITIALIZER;
 6pthread_mutex_t b = PTHREAD_MUTEX_INITIALIZER;
 7pthread_barrier_t bar;
 8
 9void *ba_lock(void *arg)
10{
11	int ret, i;
12
13	pthread_mutex_lock(&b);
14
15	if (pthread_barrier_wait(&bar) == PTHREAD_BARRIER_SERIAL_THREAD)
16		pthread_barrier_destroy(&bar);
17
18	pthread_mutex_lock(&a);
19
20	pthread_mutex_unlock(&a);
21	pthread_mutex_unlock(&b);
22}
23
24int main(void)
25{
26	pthread_t t;
27
28	pthread_barrier_init(&bar, NULL, 2);
29
30	if (pthread_create(&t, NULL, ba_lock, NULL)) {
31		fprintf(stderr, "pthread_create() failed\n");
32		return 1;
33	}
34	pthread_mutex_lock(&a);
35
36	if (pthread_barrier_wait(&bar) == PTHREAD_BARRIER_SERIAL_THREAD)
37		pthread_barrier_destroy(&bar);
38
39	pthread_mutex_lock(&b);
40
41	pthread_mutex_unlock(&b);
42	pthread_mutex_unlock(&a);
43
44	pthread_join(t, NULL);
45
46	return 0;
47}