source: mainline/uspace/tester/thread/thread1.c@ de33dab

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since de33dab was de33dab, checked in by Jakub Jermar <jakub@…>, 18 years ago

Revert some of the changes introduced in revision 2209.
I think it is not correct to remove serialization of pseudo threads in printf_core.c.
With thread-level futex serialization, several pseudo threads running in one thread could easily deadlock
the task.

Add a dedicated futex serialization to thread1.c test only.

  • Property mode set to 100644
File size: 2.6 KB
RevLine 
[dd655970]1/*
2 * Copyright (c) 2005 Jakub Vana
3 * Copyright (c) 2005 Jakub Jermar
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#define THREADS 5
31
32#include <atomic.h>
33#include <thread.h>
34#include <stdio.h>
35#include <unistd.h>
[de33dab]36#include <futex.h>
[dd655970]37#include "../tester.h"
38
39static atomic_t finish;
40static atomic_t threads_finished;
41static bool sh_quiet;
42
[de33dab]43static atomic_t srlz = FUTEX_INITIALIZER;
44
[dd655970]45static void threadtest(void *data)
46{
47 thread_detach(thread_get_id());
48
49 while (atomic_get(&finish)) {
[de33dab]50 if (!sh_quiet) {
51 futex_down(&srlz);
[201abde]52 printf("%llu ", thread_get_id());
[de33dab]53 futex_up(&srlz);
54 }
[2a98e58]55 usleep(100000);
[dd655970]56 }
57 atomic_inc(&threads_finished);
58}
59
60char * test_thread1(bool quiet)
61{
62 unsigned int i, total = 0;
63 sh_quiet = quiet;
64
65 atomic_set(&finish, 1);
66 atomic_set(&threads_finished, 0);
67
68 for (i = 0; i < THREADS; i++) {
[201abde]69 if (thread_create(threadtest, NULL, "threadtest", NULL) < 0) {
[dd655970]70 if (!quiet)
71 printf("Could not create thread %d\n", i);
72 break;
73 }
74 total++;
75 }
76
[de33dab]77 if (!quiet) {
78 futex_down(&srlz);
[dd655970]79 printf("Running threads for 10 seconds...\n");
[de33dab]80 futex_up(&srlz);
81 }
[dd655970]82 sleep(10);
83
84 atomic_set(&finish, 0);
85 while (atomic_get(&threads_finished) < total) {
86 if (!quiet)
87 printf("Threads left: %d\n", total - atomic_get(&threads_finished));
88 sleep(1);
89 }
90
91 return NULL;
92}
Note: See TracBrowser for help on using the repository browser.