{
return (shared_data == NULL || !shared_data->stopping);
}
+
+static void shmem_end_time_locked(void)
+{
+ shared_data->body.stop_barrier--;
+ if (shared_data->body.stop_barrier == 0)
+ gettimeofday(&shared_data->body.end_time, NULL);
+}
+
+static void shmem_start_time_locked(void)
+{
+ shared_data->body.start_barrier--;
+ if (shared_data->body.start_barrier == 0) {
+ shmem_wakeup_all();
+ gettimeofday(&shared_data->body.start_time, NULL);
+ } else {
+ shmem_wait();
+ }
+}
+
#else
static int shmem_setup(void)
{
child_base_id += (thread - 1) * \
(MAX_BASE_ID / nthreads);
- shared_data->body.start_barrier--;
- if (shared_data->body.start_barrier == 0) {
- shmem_wakeup_all();
-
- gettimeofday(&shared_data->body.start_time, NULL);
- printf("%s: start at %s", jt_cmdname(argv[0]),
- ctime(&shared_data->body.start_time.tv_sec));
- } else {
- shmem_wait();
- }
+ shmem_start_time_locked();
shmem_unlock();
}
#endif
#ifdef MAX_THREADS
if (thread) {
shmem_lock();
- shared_data->body.stop_barrier--;
- if (shared_data->body.stop_barrier == 0) {
- gettimeofday(&shared_data->body.end_time, NULL);
- printf("%s: end at %s", jt_cmdname(argv[0]),
- ctime(&shared_data->body.end_time.tv_sec));
- }
+ shmem_end_time_locked();
shmem_unlock();
}
#endif
thr_offset += (thread - 1) * len;
}
- shared_data->body.start_barrier--;
- if (shared_data->body.start_barrier == 0)
- shmem_wakeup_all();
- else
- shmem_wait();
-
+ shmem_start_time_locked();
shmem_unlock ();
}
#endif
ctime(&end.tv_sec));
}
+#ifdef MAX_THREADS
+ if (thread) {
+ shmem_lock();
+ shmem_end_time_locked();
+ shmem_unlock();
+ }
+#endif
return rc;
}