1 /*
2 * mutex3.c
3 *
4 *
5 * --------------------------------------------------------------------------
6 *
7 * Pthreads-embedded (PTE) - POSIX Threads Library for embedded systems
8 * Copyright(C) 2008 Jason Schmidlapp
9 *
10 * Contact Email: jschmidlapp@users.sourceforge.net
11 *
12 *
13 * Based upon Pthreads-win32 - POSIX Threads Library for Win32
14 * Copyright(C) 1998 John E. Bossom
15 * Copyright(C) 1999,2005 Pthreads-win32 contributors
16 *
17 * Contact Email: rpj@callisto.canberra.edu.au
18 *
19 * The original list of contributors to the Pthreads-win32 project
20 * is contained in the file CONTRIBUTORS.ptw32 included with the
21 * source code distribution. The list can also be seen at the
22 * following World Wide Web location:
23 * http://sources.redhat.com/pthreads-win32/contributors.html
24 *
25 * This library is free software; you can redistribute it and/or
26 * modify it under the terms of the GNU Lesser General Public
27 * License as published by the Free Software Foundation; either
28 * version 2 of the License, or (at your option) any later version.
29 *
30 * This library is distributed in the hope that it will be useful,
31 * but WITHOUT ANY WARRANTY; without even the implied warranty of
32 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
33 * Lesser General Public License for more details.
34 *
35 * You should have received a copy of the GNU Lesser General Public
36 * License along with this library in the file COPYING.LIB;
37 * if not, write to the Free Software Foundation, Inc.,
38 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
39 *
40 * --------------------------------------------------------------------------
41 *
42 * Declare a static mutex object, lock it, trylock it,
43 * and then unlock it again.
44 *
45 * Depends on API functions:
46 * pthread_mutex_lock()
47 * pthread_mutex_trylock()
48 * pthread_mutex_unlock()
49 */
50
51 #include <stdio.h>
52 #include <stdlib.h>
53
54 #include "test.h"
55
56 static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
57
58 static int washere = 0;
59
func(void * arg)60 static void * func(void * arg)
61 {
62 assert(pthread_mutex_trylock(&mutex1) == EBUSY);
63
64 washere = 1;
65
66 return 0;
67 }
68
69 int
pthread_test_mutex3()70 pthread_test_mutex3()
71 {
72 pthread_t t;
73
74 mutex1 = PTHREAD_MUTEX_INITIALIZER;
75
76 assert(pthread_mutex_lock(&mutex1) == 0);
77
78 assert(pthread_create(&t, NULL, func, NULL) == 0);
79 assert(pthread_join(t, NULL) == 0);
80
81 assert(pthread_mutex_unlock(&mutex1) == 0);
82
83 assert(washere == 1);
84
85 assert(pthread_mutex_destroy(&mutex1) == 0);
86
87 return 0;
88 }
89