diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-09-02 18:31:54 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-09-02 18:31:54 +0000 |
commit | 8d3339526af25cd65f0d99ba6d2a05b37b61e1d0 (patch) | |
tree | f83b4a65457644b7311edb4fb4fcb5747f19189b | |
parent | 72a7867c5cb436a3996d577ff5f90a82b13ccb35 (diff) | |
download | gcc-8d3339526af25cd65f0d99ba6d2a05b37b61e1d0.zip gcc-8d3339526af25cd65f0d99ba6d2a05b37b61e1d0.tar.gz gcc-8d3339526af25cd65f0d99ba6d2a05b37b61e1d0.tar.bz2 |
multi.c (_gfortran_caf_register): New function.
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.
From-SVN: r264044
-rw-r--r-- | libgfortran/ChangeLog.dev | 6 | ||||
-rw-r--r-- | libgfortran/caf/multi.c | 42 |
2 files changed, 48 insertions, 0 deletions
diff --git a/libgfortran/ChangeLog.dev b/libgfortran/ChangeLog.dev index d466bec..b051202 100644 --- a/libgfortran/ChangeLog.dev +++ b/libgfortran/ChangeLog.dev @@ -1,5 +1,11 @@ 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 SYNC IMAGGES (*) correctly. diff --git a/libgfortran/caf/multi.c b/libgfortran/caf/multi.c index d02e49d..f4a700c 100644 --- a/libgfortran/caf/multi.c +++ b/libgfortran/caf/multi.c @@ -123,6 +123,48 @@ _gfortran_caf_init (int *argcptr, char ***argvptr) 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 |