+2018-09-02 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ * caf/multi.c (_gfortran_caf_register): New function.
+ (_gfortran_caf_lock): New function.
+ (_gfortran_caf_unlock): New function.
+
2018-09-02 Thomas Koenig <tkoenig@gcc.gnu.org>
* caf/multi.c (_gfortran_caf_sync_images): Handle
pthread_barrier_wait (&sync_all_barrier);
}
+/* Implementation of caf_register - so far only good enough to allow for
+ CRITICAL / END CRITICAL. */
+
+void
+_gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token,
+ gfc_descriptor_t *data, int *stat, char *errmsg,
+ size_t errmsg_len)
+{
+ if (type == CAF_REGTYPE_CRITICAL)
+ {
+ pthread_mutex_t *mutex, **mp;
+ mutex = malloc (sizeof *mutex);
+ pthread_mutex_init (mutex, NULL);
+ mp = token;
+ *mp = mutex;
+ }
+}
+
+/* Implement a lock. */
+
+void
+_gfortran_caf_lock (caf_token_t token, size_t index,
+ int image_index __attribute__ ((unused)),
+ int *aquired_lock, int *stat, char *errmsg, size_t errmsg_len)
+{
+ pthread_mutex_t *mutex;
+ mutex = token;
+ pthread_mutex_lock (mutex);
+}
+
+/* Implement an unlock. */
+
+void
+_gfortran_caf_unlock (caf_token_t token, size_t index,
+ int image_index __attribute__ ((unused)),
+ int *stat, char *errmsg, size_t errmsg_len)
+{
+ pthread_mutex_t *mutex;
+ mutex = token;
+ pthread_mutex_unlock (mutex);
+}
+
/*
Doesn't work
void