Как реализовать многопоточность?

Рейтинг: 0Ответов: 1Опубликовано: 27.11.2014

Нужно реализовать многопоточность с помощью fork(). Приветствуется любая помощь, хоть ссылку на ресурс, где можно что-то почитать дельное по поводу fork().

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
 int server_sockfd, client_sockfd;
 int server_len, client_len;
 struct sockaddr_un server_address;
 struct sockaddr_un client_address;

 server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);

 server_address.sun_family = AF_UNIX;
 strcpy(server_address.sun_path, "/home/coder/dataFaros");
  unlink(server_address.sun_path);
 server_len = sizeof(server_address);
 bind(server_sockfd, (struct sockaddr *)&server_address, server_len);

 listen(server_sockfd, 5);

  har ch;
  printf("server waiting\n");

   client_len = sizeof(client_address);
   client_sockfd = accept(server_sockfd,
    (struct sockaddr *)&client_address, &client_len);
    read(client_sockfd, &ch, 1);
    write(client_sockfd, &ch, 1);
    printf("server waiting\n");
    close(client_sockfd);
}

Ответы

▲ 2

@smallFish, только вот fork, порождает новый процесс (process), а не поток (thread) (иногда их называют нитями, чтобы не путать с потоками ввода-вывода (stream)).

Потоки (т.е. параллельно исполняемые последовательности команд в одном адресном пространстве) в Linux создаются вызовом функции pthread_create.

Наверное не стоит использовать термин fork вместе с термином поток (т.е. не стоит смешивать процессы с потоками), если Вас на самом деле не интересует использование fork (т.е. запуск новых процессов) в многопоточной программе (той, в которой уже создано несколько threads).

Для полноты картины следует сказать, что на самом деле в Linux, для запуска и нового процесса и нового потока, используется один и тот же системный вызов clone с разным набором параметров.

Обновление

@kvars232, был тут у Вас комментарий

метки многопроцессорность или порождение процессов или fork() к сожалению нет. пришлось как то выкручиваться

но, куда-то пропал.

Так вот, метки можно "изобретать" самому. Когда создаете вопрос можно либо выбрать уже существующую, либо ввести свою.

Мне кажется, что процессы или multiprocessing в данном случае лучше чем многопоточность.

А многопроцессорность безусловно не подходит, т.к. этот термин связан с железом (количеством CPU), которое здесь явно не важно.