pintos: Avoid literal control character in Perl variable name.
[pintos-anon] / src / threads / synch.h
index e64bc6da2abf4c7591d940f19be4fab14ab591df..a19e88b181dff1208839ff890154aa69b299ce91 100644 (file)
@@ -1,45 +1,51 @@
-#ifndef HEADER_SYNCH_H
-#define HEADER_SYNCH_H 1
+#ifndef THREADS_SYNCH_H
+#define THREADS_SYNCH_H
 
+#include <list.h>
 #include <stdbool.h>
-#include "list.h"
 
+/* A counting semaphore. */
 struct semaphore 
   {
-    char name[16];
-    unsigned value;
-    struct list waiters;
+    unsigned value;             /* Current value. */
+    struct list waiters;        /* List of waiting threads. */
   };
 
-void sema_init (struct semaphore *, unsigned value, const char *);
+void sema_init (struct semaphore *, unsigned value);
 void sema_down (struct semaphore *);
+bool sema_try_down (struct semaphore *);
 void sema_up (struct semaphore *);
-const char *sema_name (const struct semaphore *);
 void sema_self_test (void);
 
+/* Lock. */
 struct lock 
   {
-    char name[16];
-    struct thread *holder;
-    struct semaphore semaphore;
+    struct thread *holder;      /* Thread holding lock (for debugging). */
+    struct semaphore semaphore; /* Binary semaphore controlling access. */
   };
 
-void lock_init (struct lock *, const char *);
+void lock_init (struct lock *);
 void lock_acquire (struct lock *);
+bool lock_try_acquire (struct lock *);
 void lock_release (struct lock *);
 bool lock_held_by_current_thread (const struct lock *);
-const char *lock_name (const struct lock *);
 
+/* Condition variable. */
 struct condition 
   {
-    char name[16];
-    struct list waiters;
+    struct list waiters;        /* List of waiting threads. */
   };
 
-void cond_init (struct condition *, const char *);
+void cond_init (struct condition *);
 void cond_wait (struct condition *, struct lock *);
 void cond_signal (struct condition *, struct lock *);
 void cond_broadcast (struct condition *, struct lock *);
-const char *cond_name (const struct condition *);
 
-#endif /* synch.h */
+/* Optimization barrier.
+
+   The compiler will not reorder operations across an
+   optimization barrier.  See "Optimization Barriers" in the
+   reference guide for more information.*/
+#define barrier() asm volatile ("" : : : "memory")
+
+#endif /* threads/synch.h */