Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
cs24-21fa
project06
Commits
f8f73e2b
Commit
f8f73e2b
authored
4 years ago
by
Caleb C. Sander
Browse files
Options
Download
Email Patches
Plain Diff
Fix #4
parent
58d2355a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Makefile
+1
-1
Makefile
tests/mqueue_multiple_queues.c
+55
-0
tests/mqueue_multiple_queues.c
with
56 additions
and
1 deletion
+56
-1
Makefile
View file @
f8f73e2b
...
...
@@ -15,7 +15,7 @@ else
endif
TESTS_SQUEUE
=
squeue_single_fill squeue_push_pop
TESTS_MQUEUE
=
mqueue_push_pop mqueue_empty
TESTS_MQUEUE
=
mqueue_push_pop mqueue_empty
mqueue_multiple_queues
PRIMES_THREADS
=
1 2 4 8 16 32 64
SLEEPERS
=
10
SLEEPERS_THREADS
=
$(
shell
seq
1
$(SLEEPERS)
)
...
...
This diff is collapsed.
Click to expand it.
tests/mqueue_multiple_queues.c
0 → 100644
View file @
f8f73e2b
#include <assert.h>
#include <pthread.h>
#include <time.h>
#include "queue.h"
const
size_t
QUEUES
=
10
;
const
size_t
QUEUE_VALUES
=
10
;
const
size_t
REPETITIONS
=
100
;
const
struct
timespec
ENQUEUE_DELAY
=
{.
tv_sec
=
0
,
.
tv_nsec
=
1000000
};
queue_t
*
queues
[
QUEUES
];
void
*
enqueuer
(
void
*
_queue_index
)
{
size_t
queue_index
=
(
size_t
)
_queue_index
;
queue_t
*
queue
=
queues
[
queue_index
];
for
(
size_t
i
=
0
;
i
<
QUEUE_VALUES
;
i
++
)
{
size_t
value
=
queue_index
+
i
*
QUEUES
;
queue_enqueue
(
queue
,
(
void
*
)
value
);
int
result
=
nanosleep
(
&
ENQUEUE_DELAY
,
NULL
);
assert
(
result
==
0
);
}
return
NULL
;
}
void
*
dequeuer
(
void
*
_queue_index
)
{
size_t
queue_index
=
(
size_t
)
_queue_index
;
queue_t
*
queue
=
queues
[
queue_index
];
for
(
size_t
i
=
0
;
i
<
QUEUE_VALUES
;
i
++
)
{
size_t
value
=
(
size_t
)
queue_dequeue
(
queue
);
assert
(
value
==
queue_index
+
i
*
QUEUES
);
}
return
NULL
;
}
int
main
()
{
for
(
size_t
repetition
=
0
;
repetition
<
REPETITIONS
;
repetition
++
)
{
pthread_t
enqueue_threads
[
QUEUES
];
pthread_t
dequeue_threads
[
QUEUES
];
for
(
size_t
i
=
0
;
i
<
QUEUES
;
i
++
)
{
queues
[
i
]
=
queue_init
();
int
result
=
pthread_create
(
&
dequeue_threads
[
i
],
NULL
,
dequeuer
,
(
void
*
)
i
);
assert
(
result
==
0
);
result
=
pthread_create
(
&
enqueue_threads
[
i
],
NULL
,
enqueuer
,
(
void
*
)
i
);
assert
(
result
==
0
);
}
for
(
size_t
i
=
0
;
i
<
QUEUES
;
i
++
)
{
int
result
=
pthread_join
(
enqueue_threads
[
i
],
NULL
);
assert
(
result
==
0
);
result
=
pthread_join
(
dequeue_threads
[
i
],
NULL
);
assert
(
result
==
0
);
queue_free
(
queues
[
i
]);
}
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment