瀏覽代碼

Add use_starpu_pthread_macros.cocci.

This Coccinelle turns calls to pthread_* into calls to _STARPU_PTHREAD_*
Cyril Roelandt 13 年之前
父節點
當前提交
92670e43f8

+ 73 - 0
tools/dev/experimental/use_starpu_pthread_macros.cocci

@@ -0,0 +1,73 @@
+@pthread_mutex_@
+expression E1, E2;
+@@
+(
+- pthread_mutex_init(E1, E2);
++ _STARPU_PTHREAD_MUTEX_INIT(E1, E2);
+|
+- pthread_mutex_lock(E1);
++ _STARPU_PTHREAD_MUTEX_LOCK(E1);
+|
+- pthread_mutex_unlock(E1);
++ _STARPU_PTHREAD_MUTEX_UNLOCK(E1);
+|
+- pthread_mutex_destroy(E1);
++ _STARPU_PTHREAD_MUTEX_DESTROY(E1);
+)
+
+
+@pthread_rwlock_@
+expression E;
+@@
+(
+- pthread_rwlock_init(E);
++ _STARPU_PTHREAD_RWLOCK_INIT(E);
+|
+- pthread_rwlock_rdlock(E);
++ _STARPU_PTHREAD_RWLOCK_RDLOCK(E);
+|
+- pthread_rwlock_wrlock(E);
++ _STARPU_PTHREAD_RWLOCK_WRLOCK(E);
+|
+- pthread_rwlock_unlock(E);
++ _STARPU_PTHREAD_RWLOCK_UNLOCK(E);
+|
+- pthread_rwlock_destroy(E);
++ _STARPU_PTHREAD_RWLOCK_DESTROY(E);
+)
+
+
+@pthread_cond_@
+expression E1, E2;
+@@
+(
+- pthread_cond_init(E1, E2);
++ _STARPU_PTHREAD_COND_INIT(E1, E2);
+|
+- pthread_cond_signal(E1);
++ _STARPU_PTHREAD_COND_SIGNAL(E1);
+|
+- pthread_cond_broadcast(E1);
++ _STARPU_PTHREAD_COND_BROADCAST(E1);
+|
+- pthread_cond_wait(E1, E2);
++ _STARPU_PTHREAD_COND_WAIT(E1, E2);
+|
+- pthread_cond_destroy(E1);
++ _STARPU_PTHREAD_COND_DESTROY(E1);
+)
+
+
+@pthraed_barrier_@
+expression E1, E2, E3;
+@@
+(
+- pthread_barrier_init(E1, E2, E3);
++ _STARPU_PTHREAD_BARRIER_INIT(E1, E2, E3);
+|
+- pthread_barrier_wait(E1);
++ _STARPU_PTHREAD_BARRIER_WAIT(E1);
+|
+- pthread_barrier_destroy(E1);
++ _STARPU_PTHREAD_BARRIER_DESTROY(E1);
+)

+ 24 - 0
tools/dev/experimental/use_starpu_pthread_macros_test.c

@@ -0,0 +1,24 @@
+static void
+foo(void)
+{
+	pthread_mutex_init(&mutex, NULL);
+	pthread_mutex_lock(&mutex);
+	pthread_mutex_unlock(&mutex);
+	pthread_mutex_destroy(&mutex);
+
+	pthread_rwlock_init(&rwlock);
+	pthread_rwlock_rdlock(&rwlock);
+	pthread_rwlock_wrlock(&rwlock);
+	pthread_rwlock_unlock(&rwlock);
+	pthread_rwlock_destroy(&rwlock);
+
+	pthread_cond_init(&cond, NULL);
+	pthread_cond_signal(&cond);
+	pthread_cond_broadcast(&cond);
+	pthread_cond_wait(&cond, &mutex);
+	pthread_cond_destroy(&cond);
+
+	pthread_barrier_init(&barrier, NULL, 42);
+	pthread_barrier_wait(&barrier);
+	pthread_barrier_destroy(&barrier);
+}