Интернет магазин китайских планшетных компьютеров



Компьютеры - POSIX Threads - Пример

12 мая 2011


Оглавление:
1. POSIX Threads
2. Пример



Пример использования потоков на языке C:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
 
static void wait_thread
{
    time_t start_time = time;
 
    while  == start_time)
    {
        /* do nothing except chew CPU slices for up to one second. */
    }
}
 
static void *thread_func
{
    int i;
 
    for 
    {
        fputs;
        wait_thread;
    }
 
    return NULL;
}
 
int main
{
    int i;
    pthread_t thread;
 
    if  != 0)
    {
        return EXIT_FAILURE;
    }
 
    for 
    {
        puts;
        wait_thread;
    }
 
    if  != 0)
    {
        return EXIT_FAILURE;
    }
 
    return EXIT_SUCCESS;
}

Пример использования потоков на языке C++:

#include <cstdlib>
#include <iostream>
#include <memory>
 
#include <pthread.h>
 
class Thread
{
private:
    pthread_t thread;
 
    Thread;         // copy constructor denied
    static void *thread_func   { d)->run; }
 
public:
    Thread             {}
    virtual ~Thread    {}
 
    virtual void run = 0;
 
    int start          { return pthread_create(&thread, NULL,
                           Thread::thread_func, this); }
    int wait           { return pthread_join  ; }
};
 
typedef std::auto_ptr<Thread> ThreadPtr;
 
int main
{
    class Thread_a:public Thread
    {
    public:
        void run
        {
            for )
                std::cout << "a  " << std::endl;
        }
    };
 
    class Thread_b:public Thread
    {
    public:
        void run
        {
            for)
                std::cout << "  b" << std::endl;
        }
    };
 
    ThreadPtr a );
    ThreadPtr b );
 
    if  != 0 || b->start != 0)
        return EXIT_FAILURE;
 
    if  != 0 || b->wait != 0)
        return EXIT_FAILURE;
 
    return EXIT_SUCCESS;
}

Представленные программы используют два потока, печатающих в консоль сообщения, один, печатающий 'a', второй — 'b'. Вывод сообщений смешивается в результате переключения выполнения между потоками или одновременном выполнении на мультипроцессорных системах.

Отличие состоит в том, что программа на C создает один новый поток для печати 'b', а основной поток печатает 'a'. Основной поток ждёт завершения дочернего потока.

Программа на C++ создает два новых потока, один печатает 'a', второй, соответственно, — 'b'. Основной поток ждёт завершения обоих дочерних потоков.



Просмотров: 2525


<<< Именованный канал
Библиотека потоков POSIX >>>