projects
/
model-checker-benchmarks.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
deque: fix bugs in assertion code and move up 3 variables...
[model-checker-benchmarks.git]
/
ms-queue
/
main.c
diff --git
a/ms-queue/main.c
b/ms-queue/main.c
index fefb3861834f0f237aa6ad6f3e7c3b9d903d8d8c..210c57a1e208518c6dca9558d0c9d9357e88ca19 100644
(file)
--- a/
ms-queue/main.c
+++ b/
ms-queue/main.c
@@
-7,8
+7,20
@@
static int procs = 2;
static int iterations = 1;
static int procs = 2;
static int iterations = 1;
-private_t private;
static queue_t *queue;
static queue_t *queue;
+static thrd_t *threads;
+static int num_threads;
+
+int get_thread_num()
+{
+ thrd_t curr = thrd_current();
+ int i;
+ for (i = 0; i < num_threads; i++)
+ if (curr.priv == threads[i].priv)
+ return i;
+ assert(0);
+ return -1;
+}
static void parse_args(int argc, char **argv)
{
static void parse_args(int argc, char **argv)
{
@@
-31,45
+43,44
@@
static void parse_args(int argc, char **argv)
static void main_task(void *param)
{
static void main_task(void *param)
{
- unsigned i, j;
- unsigned val;
+ unsigned i
nt i
, j;
+ unsigned
int
val;
int pid = *((int *)param);
int pid = *((int *)param);
- init_private(pid);
for (i = 0; i < iterations; i++) {
val = 1 + pid * iterations + i;
for (i = 0; i < iterations; i++) {
val = 1 + pid * iterations + i;
+ printf("worker %d, enqueueing: %u\n", pid, val);
enqueue(queue, val);
val = dequeue(queue);
enqueue(queue, val);
val = dequeue(queue);
+ printf("worker %d, dequeued: %u\n", pid, val);
}
}
int user_main(int argc, char **argv)
{
}
}
int user_main(int argc, char **argv)
{
- int i, num_threads;
- thrd_t *t;
+ int i;
int *param;
parse_args(argc, argv);
int *param;
parse_args(argc, argv);
- iterations = (iterations + (procs >> 1)) / procs;
queue = calloc(1, sizeof(*queue));
assert(queue);
num_threads = procs;
queue = calloc(1, sizeof(*queue));
assert(queue);
num_threads = procs;
- t = malloc(num_threads * sizeof(thrd_t));
+ t
hreads
= malloc(num_threads * sizeof(thrd_t));
param = malloc(num_threads * sizeof(*param));
param = malloc(num_threads * sizeof(*param));
- init_queue(queue);
+ init_queue(queue
, num_threads
);
for (i = 0; i < num_threads; i++) {
param[i] = i;
for (i = 0; i < num_threads; i++) {
param[i] = i;
- thrd_create(&t[i], main_task, ¶m[i]);
+ thrd_create(&t
hreads
[i], main_task, ¶m[i]);
}
for (i = 0; i < num_threads; i++)
}
for (i = 0; i < num_threads; i++)
- thrd_join(t[i]);
+ thrd_join(t
hreads
[i]);
free(param);
free(param);
- free(t);
+ free(t
hreads
);
free(queue);
return 0;
free(queue);
return 0;