Đa Luồng Là Gì, Hoạt động Như Thế Nào? - Programming Trang chủ » đa Luồng Là Gì » Đa Luồng Là Gì, Hoạt động Như Thế Nào? - Programming Có thể bạn quan tâm Dạ Lương Như Tạc đa Lượng Sinh 10 đa Luồng Thread Java đa Lượng Tiếng Anh Là Gì đa Lượng Tỉ Lệ đại Diện Vai Trò Đa luồng là gì, hoạt động như thế nào? programming multithreading ITSRD (ITSRD) July 27, 2019, 4:23am #1 Mọi người ơi, mình đọc tài liệu mà vẫn chưa rõ đa luồng hoạt động như thế nào. PTHREAD_MUTEX_INITIALIZER có ý nghĩa gì? Luồng thread1 và thread2 là thực hiện nối tiếp nhau, giả sử không dùng thread, mà mình sử dụng hai hàm funC và funC1 như các hàm bình thường và gọi nó theo thứ tự, thì nó khác gì khi sử dụng đa luồng? Mọi người có thời gian thì trao đổi cùng mình nhé! #include "pthread.h" #include <stdio.h> #include <conio.h> int couter = 0; pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; void * funcC(void *data) { pthread_mutex_lock(&mutex1); couter += 100; printf("Gia tri couter trong Func:%d\n",couter); pthread_mutex_unlock(&mutex1);//mở khoá biến mutex. Một lỗi trả về nếu mutex đã mở khoá hoặc được sở hữu của một thread khác. //Khoá việc truy cập các biến của các thead khác. Do đó thực thi này có toàn quyeenf truy cập và thiết lập cho các biến return NULL; } void * funcC1(void *data) { pthread_mutex_lock(&mutex1); couter += 200; printf("Gia tri couter trong Func1:%d\n",couter); pthread_mutex_unlock(&mutex1); return NULL; } int main(int argc, char * argv[]) { pthread_t thread1, thread2; pthread_create(&thread1,NULL,&funcC,NULL); pthread_create(&thread2,NULL,&funcC1,NULL); pthread_join(thread1,NULL); pthread_join(thread2,NULL); printf("Gia tri cuoi cung cua counter: %d\n",couter); getch(); return 0; } 1 Like kisuluoibieng (Tên Gì Cũng Được) July 26, 2019, 10:11am #2 Khi người ta muốn làm nhiều việc cùng 1 lúc Ví dụ như Tấm bị gì ghẻ bắt phải lựa hột é với mè đen (task 1) xong mới cho đi dự dạ hội (task 2) thì lúc này ông bụt (dev) kêu mấy con chim lựa hột é với mè đen (tạo ra 1 thread mới để thực hiện task 1), còn Tấm thì không cần làm chuyện đó nữa mà chỉ việc lên đồ và đi quẩy thôi (task 2) 12h đêm dì ghẻ về thì thấy hột é với mè đen đã lựa xong (do con chim làm, có khi lũ chim ăn hết hột :)) ) trong khi thực tế tấm vẫn đi quẩy cùng hoàng tử (và bỏ quên chiếc dép) Trong thực tế khi viết code sẽ có lúc chúng ta cần tăng tốc xử lý bằng cách tạo ra thread mới để làm một số việc nào đó để thread chính không bị block (thay vì Tấm phải lựa xong đóng hạt mới được đi quẩy thì lựa xong là ăn cám luôn chứ khỏi đi nữa), tất nhiên là thường áp dụng cho những task có thể hoạt động độc lập song song rảnh rỗi chém gió cho vui vậy thôi, còn bạn hiểu không thì hên xui, học mà ví dụ si đa quá thì làm sao mà hiểu được :)) thực tế người ta không làm giống như trong ví dụ vô nghĩa trên 6 Likes SITUVN.gcd (SITUVNgcd) July 26, 2019, 10:15am #3 Đồng bộ và không đồng bộ. 4 Likes Quang_Nhat_03 (Quang Nhat) July 26, 2019, 10:41am #4 Lấy ví dụ bạn đi siêu thị mua đồ xong ra tính tiền, xui cho bạn là trước mặt bạn có 1 người mua 1000 items, trong khi bạn chỉ mua 1 item. Trong trường hợp không có đa luồng, tất nhiên bạn phải chờ rất lâu để đc tính tiền, trong khi nếu tính cho bạn trước chỉ mất ko quá 1 phút rồi có thể tính tiếp cho người mua 1000 item kia Nếu đa luồng thì tất nhiên là bạn có thể tính song song với người mua 1000 item kìa, và thế là nhanh gọn lẹ 5 Likes hungaya (Hung) July 26, 2019, 12:38pm #5 ITSRD: PTHREAD_MUTEX_INITIALIZER có ý nghĩa gì? Cách tạo mutex bằng pthread_mutex_init() chỉ có thể khoá các biến không phải là static, hay là chỉ sử dụng với các biến cục bộ (biến được khai báo trong hàm). Biến couter được khai báo ngoài tất cả các hàm, hay biến toàn cục (global variable). Biến toàn cục cũng là biến loại static. Do đó, mutex tạo bằng pthread_mutex_init() không thể khoá được biến couter. Để có thể khoá biến couter, thì sử dụng mutex được cung cấp sẵn thông qua constant PTHREAD_MUTEX_INITIALIZER. Mutex của constant cho phép truy xuất các biến static. ITSRD: Luồng thread1 và thread2 là thực hiện nối tiếp nhau, giả sử không dùng thread, mà mình sử dụng hai hàm funC và funC1 như các hàm bình thường và gọi nó theo thứ tự, thì nó khác gì khi sử dụng đa luồng? Vì cả 2 thread đều cũng sử dụng dùng 1 mutex nên nó chạy lần lượt nha. Chỉ khác nhau chỉ ở thứ tự thực hiện. Cách gọi bình thường: funcC(); funcC1(); funcC luôn chạy trước funcC1 Cách sử dụng thread: pthread_create(&thread1,NULL,&funcC,NULL); pthread_create(&thread2,NULL,&funcC1,NULL); Trình tự chạy không thể xác định được, có thể funcC chạy trước funcC1, hoặc funcC1 chạy trước funcC. 7 Likes ITSRD (ITSRD) July 29, 2019, 11:50am #6 Tại sao không thể xác định được trình tự chạy của funcC và funcC1 vậy @hungaya Duong_Act (Lão Hạc) July 29, 2019, 2:30pm #7 Đường 2 làn mạnh thằng nào thằng đó chạy thôi. 3 Likes qloved (Quân) July 29, 2019, 2:59pm #8 đa số các trường hợp thì thread nào start trước thì sẽ được chạy trước. Tuy nhiên chả có gì đảm bảo cả. Có nhiều khả năng thread 2 lại bắt đầu trước. 3 Likes DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » đa Luồng Là Gì Lập Trình đa Luồng Trong Java (Java Multi-threading) - TopDev Multi-thread Là Gì? Tất Tần Tật Thông Tin Cụ Thể Gửi Tới Bạn đọc Đa Luồng Nhanh Hay Chậm? - CodeLearn Lập Trình đa Luồng Là Gì - Hàng Hiệu Đa Luồng Trong Python (multithreading) - Viblo Luồng (điện Toán) – Wikipedia Tiếng Việt Đa Luồng (Multithread) Trong C++ Tìm Hiểu Về Lập Trình đa Luồng Trong Java Lập Trình Đa Luồng Trong JAVA - NIIT - ICT Hà Nội Tread Là Gì? Multi- Thread Là Gì? Cách Tạo Thread Trong Java. - VnCoder Luồng Thực Thi (thread), Lập Trình đa Luồng (multithreading) | Tự Học ICT Từ điển Việt Anh "đa Luồng" - Là Gì? [PDF] CHƯƠNG 3: QUẢN LÝ TIẾN TRÌNH VÀ LUỒNG - SOICT Đa Luồng Trong Java - KungFu Tech