watki_clone.c

/*
 * plik ma na celu prezentację podstawowych zagadnień z programowania w języku C / C++
 * prezentuje tworzenie wątków (poprzez clone) i uruchamianie w nich funkcji ...
 *
 * więcej o wątkach: http://rainbow.mimuw.edu.pl/SO/Linux/Temat02/opis_watki.html
 *
 * kompilacja: gcc -o watki watki_clone.c
 *
 */

#include <pthread.h>
#include <sched.h> 
#include <unistd.h> /* for sleep */
#include <stdio.h> /* fo printf */
#include <stdlib.h> /* for malloc */

int globalna; // zmienna ta wykorzystana jest do zademonstowania mozliwosci korzystania
// ze zmiennych globalnych do komunikacji między wątkami

int wypisz(char * napis) {
  char i;
  globalna = 1;
  for(i=0; i<4; i++) {
    printf("To watek: %s\n", napis);
    sleep(1);
  }
  globalna = 0;
  return 0; // koncze dzialanie watku
}

main () {
  char i;
  
  globalna = -1;

  // jest to metoda rozgaleziania procesu (zblizona do funkcji fork())
  // charakterystyczna dla Linuxa, w odroznieniu od pthread oba watki beda
  // widzoczne jako osobne procesy, mozna to zmienic podajac flagi
  // CLONE_SIGHAND | CLONE_THREAD,
  // podana tuatj flaga CLONE_VM oznacza wspoldzielenie pamieci,
  // przy pomocy tych flag mozna jeszcze wiecej ...
  // wiecej o flagach mozna przeczytac w man 2 clone
  
  // jest takze funkcja sys_clone ktora kontynuuje program
  // od miejsca wywolania a nie od zadanej funkcji
  
  void *stos; 
  stos = (void *) malloc(100);
  // na wiekszosci architektur na ktorych dziala Linux stos rosnie w dol,
  // wiec podajemy koniec przydzielonego zakresu pamieci
  clone(wypisz, stos+99, CLONE_VM, "Ala juz nie ma kota");
  
  for(i=0; i<7; i++) {
    printf("To znowu program główny (%d)\n", globalna);
    sleep(1);
  }
  return 0;
} 

XHTML generated by highlight (http://www.andre-simon.de/) from watki_clone.c



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/c_cpp/watki_clone.c) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:41 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).