Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - 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'. Основной поток ждёт завершения обоих дочерних потоков. Просмотров: 2857
|