Build-out of mutex lock/unlock

This commit is contained in:
Justin Ethier 2016-01-03 00:02:19 -05:00
parent de33b567a3
commit ef61c578c5
2 changed files with 19 additions and 6 deletions

View file

@ -124,7 +124,7 @@ object Cyc_vector_set(void *d, object v, object k, object obj);
object Cyc_make_vector(void *data, object cont, object len, object fill); object Cyc_make_vector(void *data, object cont, object len, object fill);
object Cyc_list2vector(void *data, object cont, object l); object Cyc_list2vector(void *data, object cont, object l);
object Cyc_make_mutex(void *data); object Cyc_make_mutex(void *data);
object Cyc_mutex_lock(void *data, object obj); object Cyc_mutex_lock(void *data, object cont, object obj);
object Cyc_mutex_unlock(void *data, object obj); object Cyc_mutex_unlock(void *data, object obj);
object Cyc_number2string(void *d, object cont, object n); object Cyc_number2string(void *d, object cont, object n);
object Cyc_symbol2string(void *d, object cont, object sym) ; object Cyc_symbol2string(void *d, object cont, object sym) ;

View file

@ -1244,14 +1244,27 @@ object Cyc_make_mutex(void *data) {
return lock; return lock;
} }
object Cyc_mutex_lock(void *data, object obj) { object Cyc_mutex_lock(void *data, object cont, object obj) {
// TODO: set for cooperation mutex m = (mutex) obj;
// TODO: actually lock Cyc_check_mutex(data, obj);
gc_mutator_thread_blocked((gc_thread_data *)data, cont);
if (pthread_mutex_lock(&(m->lock)) != 0) {
fprintf(stderr, "Error locking mutex\n");
exit(1);
}
gc_mutator_thread_runnable(
(gc_thread_data *)data,
boolean_t);
return boolean_t; return boolean_t;
} }
object Cyc_mutex_unlock(void *data, object obj) { object Cyc_mutex_unlock(void *data, object obj) {
// TODO: actually unlock mutex m = (mutex) obj;
Cyc_check_mutex(data, obj);
if (pthread_mutex_unlock(&(m->lock)) != 0) {
fprintf(stderr, "Error unlocking mutex\n");
exit(1);
}
return boolean_t; return boolean_t;
} }
@ -1919,7 +1932,7 @@ void _Cyc_make_mutex(void *data, object cont, object args) {
return_closcall1(data, cont, c); }} return_closcall1(data, cont, c); }}
void _Cyc_mutex_lock(void *data, object cont, object args) { void _Cyc_mutex_lock(void *data, object cont, object args) {
Cyc_check_num_args(data, "mutex-lock!", 1, args); Cyc_check_num_args(data, "mutex-lock!", 1, args);
{ object c = Cyc_mutex_lock(data, car(args)); { object c = Cyc_mutex_lock(data, cont, car(args));
return_closcall1(data, cont, c); }} return_closcall1(data, cont, c); }}
void _Cyc_mutex_unlock(void *data, object cont, object args) { void _Cyc_mutex_unlock(void *data, object cont, object args) {
Cyc_check_num_args(data, "mutex-unlock!", 1, args); Cyc_check_num_args(data, "mutex-unlock!", 1, args);