📄 thread.c
字号:
/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id: thread.c,v 1.4 2002/06/14 12:44:51 bagder Exp $ * * Copyright (C) 2002 Daniel Stenberg * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/#include <stdio.h>#include <pthread.h>#include "kernel.h"#include <poll.h>long current_tick = 0;/* * We emulate the target threads by using pthreads. We have a mutex that only * allows one thread at a time to execute. It forces each thread to yield() * for the other(s) to run. */pthread_mutex_t mp;void init_threads(void){ pthread_mutex_init(&mp, NULL); /* get mutex to only allow one thread running at a time */ pthread_mutex_lock(&mp); current_tick = time(NULL); /* give it a boost from start! */}/* int pthread_create(pthread_t *new_thread_ID, const pthread_attr_t *attr, void * (*start_func)(void *), void *arg);*/void yield(void){ current_tick+=3; pthread_mutex_unlock(&mp); /* return */ pthread_mutex_lock(&mp); /* get it again */}void newfunc(void (*func)(void)){ yield(); func();}int create_thread(void* fp, void* sp, int stk_size){ pthread_t tid; int i; int error; /* we really don't care about these arguments */ (void)sp; (void)stk_size; error = pthread_create(&tid, NULL, /* default attributes please */ (void *(*)(void *)) newfunc, /* function to start */ fp /* start argument */); if(0 != error) fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error); else fprintf(stderr, "Thread %ld is running\n", (long)tid); yield(); return error;}/* ticks is HZ per second */void x11_sleep(int ticks){ current_tick+=5; pthread_mutex_unlock(&mp); /* return */ /* portable subsecond "sleep" */ poll((void *)0, 0, ticks * 1000/HZ); pthread_mutex_lock(&mp); /* get it again */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -