با سلام...
كتابخانه thread در لينوكس چي هست؟ مثل اين كه براي كامپايل با g++ لازم هست كه اسم كتابخانه داده بشه. شما مي دونيد؟
Printable View
با سلام...
كتابخانه thread در لينوكس چي هست؟ مثل اين كه براي كامپايل با g++ لازم هست كه اسم كتابخانه داده بشه. شما مي دونيد؟
سلام
pthread.h
مرسي ولي چه جوري اضافش كنم. syntaxش چيه؟
یه برنامۀ نمونه برات می ذارم:
برای کامپایلش دستور زیر رو در شل وارد کن:کد:#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_message_function( void *ptr );
main()
{
pthread_t thread1, thread2;
char *message1 = "Thread 1";
char *message2 = "Thread 2";
int iret1, iret2;
/* Create independent threads each of which will execute function */
iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);
/* Wait till threads are complete before main continues. Unless we */
/* wait we run the risk of executing an exit which will terminate */
/* the process and all threads before the threads have completed. */
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
printf("Thread 1 returns: %d\n",iret1);
printf("Thread 2 returns: %d\n",iret2);
exit(0);
}
void *print_message_function( void *ptr )
{
char *message;
message = (char *) ptr;
printf("%s \n", message);
}
کد:
g++ -lpthread pthread1.c
فایل اجرایی برنامه a.out است. برای اجرای آن دستور زیر را وارد کنید:
خروجی به صورت زیر خواهد بود:کد:
./a.out
کد:Thread 1
Thread 2
Thread 1 returns: 0
Thread 2 returns: 0
مبانی ریسمان ها (thread) در لینوکس(linux):
POSIX THREADS آموزش فارسی
*اعمالی که روی thread ها می توان انجام داد عبارتند از: ساختن thread ، از بین بردن thread، همزمانی (Syncronization)، زمانبندی (Scheduling) ، مدیریت داده ها (data management) و ارتباط بین پروسس ها (process interaction).
*یک thread ، thread بوجود آورندۀ خود را نمی شناسد.
* همۀ thread های ایجاد شده از یک پروسس، در یک فضای آدرس دهی قرار دارند.
* thread های درون یک پروسس موارد زیر را به صورت مشترک دارا هستند:
1- دستورات پروسس
2- داده ها
3- فایل هایی که در آن پروسس باز هستند (descriptors)
4- سیگنال ها و هندل های سیگنال
5- پوشۀ فعلی پروسس
6- user و group id
*هر thread موارد زیر را به صورت unique دارد.
1- ID
2- مجموعه ای از رجیسترها، اشاره گر استک
3- استکی برای متغییرهای محلی، و برای مقادیر بازگشتی
4- signal mask
5- اولویت (priority)
6- مقدار بازگشتی : errno
* تمامی توابع کتابخانۀ pthread در صورت عدم وجود مشکل مقدار "0" برمی گردانند.
چند نکته:
1- در برنامۀ بالا از یک تابع یکسان برای اجرای دو ریسمان استفاده کرده ایم. با این حال آرگومان ها متفاوتند. البته توجه کنید که برای هر ریسمانی می توان یک تابع دلخواه داشت.
2- ریسمان ها را می توان بوسیلۀ فراخوانی تابع pthread_exit پایان داد. همچنین می توان با فراخوانی return در تابع و همچنین با فراخوانی exit (که خود پروسس و تمام ریسمان های آن را ازبین می برد) آن را پایان داد.
تابع pthread_create
این تابع ریسمان را ایجاد کرده و سپس تابع تعیین شده را همراه با آرگومان اجرا می کند.کد:int pthread_create(pthread_t * thread,
const pthread_attr_t * attr,
void * (*start_routine)(void *),
void *arg);
تابع pthread_join نیز اجرای ریسمان صدا زننده را تا زمان پایان یافتن ریسمان جدید متوقف می کند.
هدف از اجرای این تابع در این برنامه این است که ممکن است ریسمان ها به صورت کامل اجرا نشده باشند و اگر برنامه به exit برسد همۀ این ریسمان با اینکه ناقص اجرا شده اند ولی از بین می روند. استفاده از این توابع باعث متوقف شدن برنامه تا زمان پایان یافتن این دو ریسمان می شود.
ممنون دستت درد نكنه...
سلام من واسه آز سیستم عامل باید یه مقاله 15 صفحه ای از theard در لینوکس ارائه بدم ولی مقاله فارسی توی نت نیست و همه زبان اصلی.شما مقاله ای دارید که کمکم کنه.ممنون