The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"pthread и что-нибудь вроде suspend() и resume()"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"pthread и что-нибудь вроде suspend() и resume()"  
Сообщение от impatt (ok) on 15-Авг-05, 08:44 
Привет всем.
Нужно в Линуксе сделать несколько потоков и чтобы один из них мог останавливать любой другой в любой момент и мог потом разрешать ему двигаться дальше. К примеру, в JAVA есть такие функции suspend() и resume() - соответственно, остановить и продолжить поток. Кстати, остановки в заранее опреденённых в потоках местах с помощью мутексов не канают - нужно внешнее управление в произвольном месте.
Да, зачем эта вся ахинея: нужно сымитировать свой планировщик потоков, а ещё точнее, протестировать планировщик от микрооперационки для микроконтроллеров, и сделать именно собственную заморозку/разморозку потоков.
Может, найдутся у кго-нибудь хорошие мысли ?? Спасибо :)
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "pthread и что-нибудь вроде suspend() и resume()"  
Сообщение от impatt (ok) on 15-Авг-05, 13:38 
Сам себе и отвечаю:
оказывается, можно функцией pthread_kill посылать соответствующие сигналы потоку. Нижеследующая программка иллюстрирует сказанное.

#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>

//это отдельный поток, выполняется параллельно после его запуска функцией pthread_create()
//печатает каждую секунду сообщение и так пока программа (процесс) не завершится
void* my_t(void *hlam){
    while(1){
        sleep(1);                    //sleep 1 second
        puts("My thread is work");    //still alive :)
        }
    };
    

int main(){
    pthread_t th;                                        //дескриптор создаваемого потока
    pthread_create(&th, NULL, my_t, (void *)"none");    //создаём поток
    puts("***Thread was created***");                    //поток рождён.
    sleep(3);                                            //сон 3 секунды
    pthread_kill(th, SIGSTOP);                            //шлём сигнал "СТОП"
    puts("***Thread was suspended***");
    sleep(5);
    pthread_kill(th, SIGCONT);                            //шлём сигнал "ПРОДОЛЖИТЬ"
    puts("***Thread was resumed***");
    sleep(3);
    return 0;
    }

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "pthread и что-нибудь вроде suspend() и resume()"  
Сообщение от Yurial on 11-Апр-08, 10:21 
Note that pthread_kill() only causes the signal to be handled in the context of the given thread; the signal action (termination or stopping) affects the process as a whole. (с) man pthread_kill

Отметьте, что pthread_kill () только заставляет сигнал быть обработанным в контексте данной нити; действие сигнала (завершение или остановка) затрагивает процесс в целом. (c) promt.ru

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру