- Phát triển data.frame theo cách hiệu quả về bộ nhớ
- phát hiện rò rỉ bộ nhớ ruby/ruby on rails
- Không thể giải quyết việc nhập android.support.v7.app
- Ổ cắm miền UNIX và bộ nhớ chia sẻ (tệp được ánh xạ)
Trong mã của tôi có ba chương trình chạy đồng thời. Tôi cố gắng cung cấp một cái nhìn tổng quan ngắn gọn về mã của tôi,
Thói quen 1 {
làm gì đó
*Gửi int đến Routine 2
Gửi int đến Routine 3
In cái gì đó
In cái gì đó*
làm gì đó
}
Thói quen 2 {
làm gì đó
*Gửi int đến Routine 1
Gửi int đến Routine 3
In cái gì đó
In cái gì đó*
làm gì đó
}
Thói quen 3 {
làm gì đó
*Gửi int đến Routine 1
Gửi int đến Routine 2
In cái gì đó
In cái gì đó*
làm gì đó
}
chủ yếu {
thói quen1
thói quen2
thói quen3
}
Tôi muốn rằng trong khi mã giữa hai goroutine (mã giữa hai dấu sao) đang thực thi, luồng điều khiển không thể chuyển đến các goroutine khác. Ví dụ, trong khi thói quen 1 đang thực hiện hai sự kiện giữa các ngôi sao (sự kiện gửi và sự kiện in), thói quen 2 và 3 phải bị chặn (có nghĩa là luồng thực thi sẽ không chuyển từ thói quen 1 sang thói quen 2 hoặc 3). Sau khi sự kiện in cuối cùng hoàn tất, luồng thực thi có thể chuyển sang quy trình 2 hoặc 3. Có ai có thể giúp tôi bằng cách chỉ rõ cách tôi có thể đạt được điều này không? Có thể vượt qua được không? Nhóm Chờ Thực hiện các thông số kỹ thuật trên? Có ai có thể cho tôi biết cách triển khai ví dụ nêu trên bằng cách sử dụng WaitGroup bằng cách đưa ra một ví dụ đơn giản không? Cảm ơn.
LƯU Ý: Tôi đưa ra hai tùy chọn Gửi và hai tùy chọn In, thực ra có rất nhiều tùy chọn Gửi và In.
1 Câu trả lời
Nếu tôi không nhầm thì điều bạn muốn là ngăn không cho một số phần nhất định của mỗi hàm thực thi đồng thời với các hàm khác. Đoạn mã sau thực hiện điều này: fmt.InIn
Dòng này không xuất hiện khi các chương trình khác đang chạy. Sau đây là những gì xảy ra: Khi lệnh thực thi đến phần in, nó sẽ đợi cho đến khi các lệnh khác hoàn tất (nếu chúng đang chạy) và trong khi dòng lệnh in này đang thực thi các lệnh khác, các lệnh khác không khởi động và đợi. Tôi hy vọng đây là những gì bạn đang tìm kiếm. Xin hãy sửa cho tôi nếu tôi sai về điều này.
gói chính
nhập khẩu (
"fmt"
"rand"
"đồng bộ"
)
biến (
mutex1, mutex2, mutex3 đồng bộ.Mutex
wg đồng bộ.WaitGroup
)
hàm Routine1() {
mutex1.Khóa()
// làm gì đó
đối với i := 0; i < 200; i++ {
mutex2.Khóa()
mutex3.Khóa()
fmt.Println("giá trị của z")
mutex2.Mở khóa()
mutex3.Mở khóa()
}
// làm gì đó
mutex1.Mở khóa()
wg.Xong()
}
hàm Routine2() {
mutex2.Khóa()
// làm gì đó
đối với i := 0; i < 200; i++ {
mutex1.Khóa()
mutex3.Khóa()
fmt.Println("giá trị của z")
mutex1.Mở khóa()
mutex3.Mở khóa()
}
// làm gì đó
mutex2.Mở khóa()
wg.Xong()
}
hàm Routine3() {
mutex3.Khóa()
// làm gì đó
đối với i := 0; i < 200; i++ {
mutex1.Khóa()
mutex2.Khóa()
fmt.Println("giá trị của z")
mutex1.Mở khóa()
mutex2.Mở khóa()
}
// làm gì đó
mutex3.Mở khóa()
wg.Xong()
}
hàm main() {
wg.Thêm(3)
đi Routine1()
đi Routine2()
Thói quen3()
wg. Chờ()
}
làm mới: Hãy để tôi giải thích ba mutex này ở đây: Một mutex làtài liệu nói rằng. : "khóa mutex." Điều này có nghĩa là khi bạn gọi Khóa
Nếu người khác đã khóa cùng một mutex, mã của bạn sẽ nằm ở đó. Trong cuộc gọi của bạn Mở khóa
Sau đó, mã bị chặn sẽ được khôi phục ngay lập tức.
Ở đây tôi đặt mỗi hàm vào mutex riêng của nó bằng cách khóa mutex ở đầu hàm và mở khóa ở cuối hàm. Với cơ chế đơn giản này, bạn có thể tránh phải chạy bất kỳ phần nào của mã bạn muốn cùng lúc với việc chạy các hàm này. Ví dụ, khi Thói quen1
Trong khi chạy, bất cứ nơi nào bạn muốn có mã không nên chạy, chỉ cần khóa ở đầu mã đó mutex1
Mở khóa ở cuối. Đây là tôi Thói quen2
Và Thói quen3
được thực hiện trong hàng thích hợp của Hi vọng điều này có thể làm sáng tỏ mọi việc.
Liên quan đến go - mutex của các coroutine đồng thời, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8315970/
Tôi chỉ có một câu hỏi nhanh về lập trình đồng thời trong Java. Ví dụ, tôi có một ma trận NxN và mỗi hàng của ma trận có một luồng tương ứng. Nếu không có tương tác giữa các luồng trong mỗi hàng, liệu có an toàn (hoặc đúng) nếu nhiều luồng truy cập và sửa đổi các hàng riêng biệt của ma trận cùng một lúc không?
jwplayer("myElement_0").onPlay(function(){ pausePlayers(1); alert('0 đã bắt đầu'); }); jwplayer("my
Tôi đang suy nghĩ. Khi tôi sử dụng std::mutex_lock và muốn dựa vào lệnh bảo vệ để giải phóng nó, tôi có thể sử dụng như thế này không? lớp MyClass{ riêng tư: có thể thay đổi std::mutex _loc
Liệu mô hình loại trừ lẫn nhau này có an toàn như tôi nghĩ không? Nếu vậy, bạn sẽ gọi nó bằng cách nào? khóa (_lock) { nếu (_flag) trả về; nếu không thì _flag = true; } thử {
Tôi có một thư viện tĩnh để truy cập cơ sở dữ liệu. Nó có hàm readMaximum(). readMaximum() Đọc giá trị tối đa từ cơ sở dữ liệu. Chức năng này an toàn với luồng (sử dụng mutex). Nhưng vấn đề là: có hai tiến trình A.exe và Be
Tôi đang vật lộn với logic của mutex; ở đây tôi kiểm tra xem khóa đã được sử dụng chưa, nếu chưa, chúng ta sẽ lấy khóa và giải phóng khi hoàn tất; nhưng bạn có thể giúp tôi xem làm thế nào để có một vòng lặp kiểm tra khóa cho đến khi khóa đó khả dụng không? rdb.setnx(khóa
Tôi đang viết chương trình Prolog sử dụng clp(fd) và tôi gặp sự cố khi triển khai một trong những ràng buộc mà tôi muốn. Đầu ra là một danh sách các số nguyên (độ dài của danh sách này phụ thuộc vào đầu vào từ một phần khác của chương trình) với một số cặp số được xác định trước loại trừ lẫn nhau và một số trong mỗi cặp phải có trong đầu ra.
Tôi đang cố gắng triển khai cụm lizardfs bằng cách sử dụng mesos/marathon. Với mục đích này, tôi đã tạo một số hình ảnh docker. Tôi cần lấy một loại container docker nhất định (lizardfs-master) và
Giả sử tôi có một bảng MySQL với các cột sau: |biến|1. | 'a' |2. | 'a b' |3. | 'ab c' |4. | ... | Làm thế nào có thể
Tôi có 7 RadioButton trên một biểu mẫu. 3 trong số chúng thuộc về một nhóm và 4 thuộc về một nhóm khác. Tôi muốn các RadioButton loại trừ lẫn nhau trong nhóm. Điều này có thể đạt được bằng cách đặt chúng vào hai GroupBox, có cách nào để thực hiện mà không cần đặt chúng vào không?
Tôi đang cố gắng làm cho mục nhập văn bản và hộp kiểm loại trừ lẫn nhau. Theo mặc định, hộp văn bản phải chứa "0" và hộp kiểm phải là sai. Nếu người dùng chọn hộp kiểm, hộp văn bản sẽ bị xóa. Nếu người dùng nhập giá trị vào hộp văn bản, hộp kiểm phải được bỏ chọn. Không có thời gian nào nên
Tôi đã viết câu hỏi của mình trong phần bình luận của mã. Tôi đang cố gắng sử dụng pthreads để làm cho mã của mình song song. Đầu tiên, tôi muốn ghi một lượng lớn dữ liệu vào bộ nhớ song song thông qua nhiều luồng. Sau khi ghi dữ liệu, tôi muốn thực thi dữ liệu này bằng cùng một luồng. Sau khi thực hiện dữ liệu, tôi muốn đọc
Câu hỏi này đã có câu trả lời ở đây: Đã đóng cách đây 13 năm. Có thể trùng lặp: Monitor so với Mutex trong c# Xin chào, tôi thấy bối rối với những câu trả lời khác nhau từ nhiều người trên trang web này. vẫn
Tôi cần gọi một hàm trả về một id duy nhất, int getid() { static id=0; id++; return id; } Nhiều luồng cần gọi hàm này, vấn đề của tôi là tôi không chắc mình cần khóa mutex ở đâu,
Vui lòng tham khảo video từ WWDC https://developer.apple.com/videos/play/wwdc2015/226/ Người nói cho thấy chúng ta có thể sử dụng cùng một loại thể hiện NSopeation giữa hai
Tổng quan: Tôi có một ứng dụng iOS sử dụng CoreData > Có một thực thể có tên là Animal có một tập hợp các bản ghi là Lion, Tiger và Elephant. Tôi chỉ muốn đánh dấu một bản ghi là yêu thích. Các thực thể tương tự với cùng phương pháp
Câu hỏi này đã có câu trả lời ở đây: Đã đóng cách đây 12 năm. Có thể trùng lặp: An toàn luồng DLL Xin chào, tôi đang viết một tệp DLL trong MS VS C++ express.
Ứng dụng của tôi buộc phải sử dụng mô-đun của bên thứ 3 có thể khiến Windows gặp màn hình xanh nếu hai phiên bản được khởi động cùng lúc trên cùng một máy. Để giải quyết vấn đề này, ứng dụng C# của tôi có một mutex: static Mutex mutex =
Tôi mới làm quen với Go và muốn triển khai cơ chế mutex tùy chỉnh cho phép mỗi người dùng ứng dụng có thể thực thi một goroutine tại một thời điểm. Để đơn giản, hãy coi U1 và U2 là người dùng ứng dụng và F1(userId), F2(userId)
Tôi cần kết hợp chức năng lựa chọn đơn và nhiều mục vào một điều khiển. Cụ thể, tôi có một số lựa chọn. Cái đầu tiên loại trừ lẫn nhau với những cái còn lại. Vì vậy, nếu tôi chọn mục đầu tiên, tôi cần bỏ chọn tất cả các mục khác. Nếu một trong hai mục được chọn, mục đầu tiên phải được bỏ chọn (nếu đã chọn). Các lựa chọn khác
Tôi là một lập trình viên xuất sắc, rất giỏi!