Cài đặt pthread trên Visual Studio
Ngày nay với sự phát triển phần cứng máy tính, các máy tính được trang bị các bộ vi xử lý (CPU) đa lõi (Core). Để phát huy tối đa tốc độ của bộ vi xử lý này chúng ta cần cài đặt thuật toán song song. Để lập trình song song theo kiểu chia sẻ bộ nhớ (shared memory) theo kiến trúc bộ vi xử lý đa lõi, chúng ta có thể sử dụng thư viện pthread cho C/C++. Cách cài đặt và chạy chương trình trong Visual Studio như sau:
Download thư viện pthread mới nhất tại: Souceware hoặc tại Tìm ở đây
- Di chuyển đến thư mục include của download.
- Paste tất cả các file *.h tới thư mục include của C++ trong Visual Studio. Trên máy tính tôi là: “C:\Program Files\Microsoft Visual Studio 10.0\VC\include“, cũng sẽ tương tự như trên các hệ thống khác.
- Di chuyển tới thư mục dll của download.
- Paste pthreadVC2.dll tới thư mục bin của C++ trong Visual Studio. Trên máy tính tôi la tại “C:\Program Files\Microsoft Visual Studio 10.0\VC\bin”. , cũng sẽ tương tự trên các hệ thống khác
- Từ thư mục lib của download.
- Paste pthreadVC2.lib (Object File Library) tới thư mục lib của C++ trong Visual Studio. Trên máy tính tôi là:”C:\Program Files\Microsoft Visual Studio 10.0\VC\lib“, cũng tương tự như trêcác hệ thống khác.
- Tạo mới Project trong Visual Studio:
- Vào menu File > New > New Project cửa sổ New Project hiện lên bạn chọn Visual C++ > Win32 > Win32 Console Application rồi nhập tên Project, giả sử là ThreadFibonacci như hình bên dưới.
- Ở cửa sổ tiếp theo bạn bỏ lựa chọn Precompiled header như hình bên dưới rồi ấn nút Finish
- Vào Menu View > Solution Explorer
- Kích chuột phải vào tên Project “ThreadFibonacci” trên cửa sổ Solution Explorer mở ra menu rồi chọn Properties. Kích chuột vào Linker > Input, bên cửa sổ bên phải trong Additional Dependencies, bạn thêm tên thư viện pthreadVC2.lib
- Mở tệp ThreadFibonacci.cpp rồi copy code dưới đây vào chạy thử:
#include <stdio.h>
#include <stdlib.h>
#include "pthread.h"
int sum; /* bien nay dung de chia se du lieu boi cac thread*/
void *runner(void *param); /*khai bao ham chay thread */
int fibonacci(int x);/*khai bao ham Fibonacci*/
int main(int argc, char *argv[])
{
int count, i;
pthread_attr_t attr;
if (argc != 2) {
fprintf(stderr,"Su dung: ten_chuong_trinh so_nguyen \n");
return -1;
}
count = atoi(argv[1]);
if (count < 1) {
fprintf(stderr,"%d phai la >= 1\n", count);
return -1;
}
pthread_attr_init(&attr);
for(i=1;i<=count;i++){
pthread_t thread;
pthread_create(&thread,&attr,runner,(void*)i);
pthread_join(thread,NULL);
printf("Fibonacci cua %d la %d\n", i, sum);
}
}
void *runner(void *param)
{
sum = fibonacci((int)param);
pthread_exit(0);
return NULL;
}
int fibonacci (int x)
{
if (x <= 1) {
return 1;
}
return fibonacci(x-1) + fibonacci(x-2);
}
- Kích vào menu Build > Build Solution hoặc Debug > Start Debugging hoặc ấn phím F5, biên dịch sẽ thành công nếu không có lỗi
- Mở chương trình Cmd , dùng câu lênh cd để chuyển tới thư mục chứa Project của bạn, trong ví dụ này ở thư mục “C:\Projects\ThreadFibonacci” xem hình bên dưới:
- Gõ câu lệnh trong cửa sổ Command Prompt: ThreadFibonacci.exe 40, kết quả có thể xem hình ở dưới:
Chú ý: Khi bạn chạy gặp lỗi “The program can’t start because pthreadVC2.dll is missing from your computer. Try reinstalling the program to fix this problem.” thì bạn copy thư viện pthreadVC2.dll vào cùng thư mục chứa file .exe của chương trình
thầy ơi. của em là win 10 64bit nên ở ổ C có 2 thư mục Program Files và Program Files (x86) thì cả 2 đều có Microsoft Visual Studio , nhưng ở thư mục Program Files thì chỉ có Microsoft Visual Studio 12.0, e ấn vào thì chỉ có thư mục Common7 thôi. còn thư mục Program Files (x86) thì lại có 2 cái thư mục Microsoft Visual Studio 11.0 và 12.0
cho nên e cũng k biết phải làm ntn cả, không giống với của thầy cho lắm
Chào em,
Nếu em tìm thấy VS 12.0 trong Program Files (x86) thì em tìm trong thư mục VC trong Microsoft Visual Studio 12.0 nhé. Quan trọng em cài xong, em test thử nếu có lỗi thì thử thư mục VC trong Microsoft Visual Studio 11.0
admin cho em hỏi là khi em chạy chương trình mẫu thì bị báo lỗi là: C2011 ‘timespec’: ‘struct’ type redefinition. em có search thì bảo thêm #pragma once nhưng không được ạ. em phải sửa thế nào ạ?