Hiểu rỏ hơn về chuẩn Pthreads trong bài 5 Đa Luồng

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Hiểu rỏ hơn về chuẩn Pthreads trong bài 5 Đa Luồng

Bài gửi  NguyenXuanThi(I22A) on 24/3/2013, 12:35

Pthreads tham chiếu tới chuẩn POSIX (IEEE 1003.1c) định nghĩa API cho việc
tạo và đồng bộ luồng. Đây là một đặc tả cho hành vi luồng không là một cài đặt.
Người thiết kế hệ điều hành có thể cài đặt đặc tả trong cách mà họ muốn. Thông
thường, các thư viện cài đặt đặc tả Pthread bị giới hạn đối với các hệ thống dựa trên
cơ sở của UNIX như Solaris 2. Hệ điều hành Windows thường không hỗ trợ Pthreads
mặc dù các ấn bản shareware là sẳn dùng trong phạm vi công cộng.
Trong phần này chúng ta giới thiệu một số Pthread API như một thí dụ cho thư
viện luồng cấp người dùng. Chúng ta sẽ xem nó như thư viện cấp người dùng vì
không có mối quan hệ khác biệt giữa một luồng được tạo dùng Pthread và luồng được
gắn với nhân. Chương trình C hiển thị trong hình dưới đây, mô tả một Pthread API cơ
bản để xây dựng một chương trình đa luồng.
Chương trình hiển thị trong hình tạo một luồng riêng xác định tính tổng của một
số nguyên không âm. Trong chương trình Pthread, các luồng riêng bắt đầu thực thi
trong một hàm xác định. Trong hình, đây là một hàm runner. Khi chương trình này
bắt đầu, một luồng riêng điều khiển bắt đầu trong main. Sau khi khởi tạo, main tạo ra
luồng thứ hai bắt đầu điều khiển trong hàm runner.
Bây giờ chúng ta sẽ cung cấp tổng quan của chương trình này chi tiết hơn. Tất
cả chương trình Pthread phải chứa tập tin tiêu đề pthread.h. pthread_t tid khai báo
danh biểu cho luồng sẽ được tạo. Mỗi luồng có một tập các thuộc tính gồm kích thước
ngăn xếp và thông tin định thời. Khai báo pthread_attr_t attr hiện diện các thuộc tính
cho luồng. Chúng ta sẽ thiết lập các thuộc tính trong gọi hàm pthread_attr_init(&attr).
Vì chúng ta không thiết lập rõ thuộc tính, chúng ta sẽ dùng thuộc tính mặc định được
cung cấp. Một luồng riêng được tạo với lời gọi hàm pthread_create. Ngoài ra, để
truyền định danh của luồng và các thuộc tính cho luồng, chúng ta cũng truyền tên của
hàm, nơi một luồng mới sẽ bắt đầu thực thi, trong trường hợp này là hàm runner. Cuối
cùng chúng ta sẽ truyền số nguyên được cung cấp tại dòng lệnh, argv[1].
Tại điểm này, chương trình có hai luồng: luồng khởi tạo trong main và luồng
thực hiện việc tính tổng trong hàm runner. Sau khi tạo luồng thứ hai, luồng main sẽ
chờ cho luồng runner hoàn thành bằng cách gọi hàm pthread_join. Luồng runner sẽ
hoàn thành khi nó gọi hàm pthread_exit.

Chương trình C đa luồng dùng Pthread AP
#include
#include
int sum: /*Dữ liệu này được chia sẻ bởi thread(s)*/
void *runner(void *param); /*luồng*/
main(int argc, char *argv[])
{
pthread_t tid; /*định danh của luồng*/
pthread_attr_t attr; /*tập hợp các thuộc tính*/
if(argc !=2){
fprintf(stderr, “usage: a.out ”);
exit();
}
if (atoi(argv[1] < 0)){
fprintf(stderr,”%d must be >= 0 \n”, atoi(argv[1]));
exit();
}
/*lấy các thuộc tính mặc định*/
pthread_attr_init(&attr);
/*tạo một luồng*/
pthread_create(&tid,&attr,runner, argv[1]);
/*bây giờ chờ luồng kết thúc*/
pthread_join(tid,NULL);
printf(“sum = %d\n”,sum);
/*Luồng sẽ bắt đầu điều khiển trong hàm này*/
void *runner(void *param)
{
int upper = atoi(param);
int i;
sum = 0;
if (upper > 0){
sum+= i;
}
pthread_exit(0);
}
}

NguyenXuanThi(I22A)

Tổng số bài gửi : 23
Join date : 21/03/2013
Age : 26

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết