3 * Sven Verdoolaege. All rights reserved.
5 * See the LICENSE file for redistribution information.
11 static const char sccsid
[] = "$Id: pthread.c,v 1.4 2000/07/22 14:52:37 skimo Exp $ (Berkeley) $Date: 2000/07/22 14:52:37 $";
14 #include <sys/types.h>
15 #include <sys/queue.h>
17 #include <bitstring.h>
27 #include "../common/common.h"
29 static int vi_pthread_run
__P((WIN
*wp
, void *(*fun
)(void*), void *data
));
30 static int vi_pthread_lock_init
__P((WIN
*, void **));
31 static int vi_pthread_lock_end
__P((WIN
*, void **));
32 static int vi_pthread_lock_try
__P((WIN
*, void **));
33 static int vi_pthread_lock_unlock
__P((WIN
*, void **));
38 * PUBLIC: void thread_init __P((GS *gp));
43 gp
->run
= vi_pthread_run
;
44 gp
->lock_init
= vi_pthread_lock_init
;
45 gp
->lock_end
= vi_pthread_lock_end
;
46 gp
->lock_try
= vi_pthread_lock_try
;
47 gp
->lock_unlock
= vi_pthread_lock_unlock
;
51 vi_pthread_run(WIN
*wp
, void *(*fun
)(void*), void *data
)
53 pthread_t
*t
= malloc(sizeof(pthread_t
));
54 pthread_create(t
, NULL
, fun
, data
);
59 vi_pthread_lock_init (WIN
* wp
, void **p
)
61 pthread_mutex_t
*mutex
;
64 MALLOC_RET(NULL
, mutex
, pthread_mutex_t
*, sizeof(*mutex
));
66 if (rc
= pthread_mutex_init(mutex
, NULL
)) {
76 vi_pthread_lock_end (WIN
* wp
, void **p
)
79 pthread_mutex_t
*mutex
= (pthread_mutex_t
*)*p
;
81 if (rc
= pthread_mutex_destroy(mutex
))
90 vi_pthread_lock_try (WIN
* wp
, void **p
)
92 printf("try %p\n", *p
);
95 return pthread_mutex_trylock((pthread_mutex_t
*)*p
);
99 vi_pthread_lock_unlock (WIN
* wp
, void **p
)
101 printf("unlock %p\n", *p
);
103 return pthread_mutex_unlock((pthread_mutex_t
*)*p
);