1 /* $NetBSD: pthread.c,v 1.2 2013/11/22 15:52:05 christos Exp $ */
4 * Sven Verdoolaege. All rights reserved.
6 * See the LICENSE file for redistribution information.
12 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 ";
15 #include <sys/types.h>
16 #include <sys/queue.h>
18 #include <bitstring.h>
28 #include "../common/common.h"
30 static int vi_pthread_run
__P((WIN
*wp
, void *(*fun
)(void*), void *data
));
31 static int vi_pthread_lock_init
__P((WIN
*, void **));
32 static int vi_pthread_lock_end
__P((WIN
*, void **));
33 static int vi_pthread_lock_try
__P((WIN
*, void **));
34 static int vi_pthread_lock_unlock
__P((WIN
*, void **));
39 * PUBLIC: void thread_init __P((GS *gp));
44 gp
->run
= vi_pthread_run
;
45 gp
->lock_init
= vi_pthread_lock_init
;
46 gp
->lock_end
= vi_pthread_lock_end
;
47 gp
->lock_try
= vi_pthread_lock_try
;
48 gp
->lock_unlock
= vi_pthread_lock_unlock
;
52 vi_pthread_run(WIN
*wp
, void *(*fun
)(void*), void *data
)
54 pthread_t
*t
= malloc(sizeof(pthread_t
));
55 pthread_create(t
, NULL
, fun
, data
);
60 vi_pthread_lock_init (WIN
* wp
, void **p
)
62 pthread_mutex_t
*mutex
;
65 MALLOC_RET(NULL
, mutex
, pthread_mutex_t
*, sizeof(*mutex
));
67 if (rc
= pthread_mutex_init(mutex
, NULL
)) {
77 vi_pthread_lock_end (WIN
* wp
, void **p
)
80 pthread_mutex_t
*mutex
= (pthread_mutex_t
*)*p
;
82 if (rc
= pthread_mutex_destroy(mutex
))
91 vi_pthread_lock_try (WIN
* wp
, void **p
)
93 printf("try %p\n", *p
);
96 return pthread_mutex_trylock((pthread_mutex_t
*)*p
);
100 vi_pthread_lock_unlock (WIN
* wp
, void **p
)
102 printf("unlock %p\n", *p
);
104 return pthread_mutex_unlock((pthread_mutex_t
*)*p
);