cuốn sách gpt4 ai đã làm

c - 用信号停止一段时间(真)

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:29:46 28 4
mua khóa gpt4 Nike

Tôi đang sử dụng ngôn ngữ c để xử lý đồng thời và tôi có một nhóm quy trình. Để làm điều này, tôi đặt mỗi phần tử con trong một vòng lặp While (True). Để giết đứa trẻ, tôi sử dụng một biến toàn cục và một bộ xử lý tín hiệu để sửa đổi nó nhằm phá vỡ vòng lặp.

Vấn đề là trẻ em sử dụng bộ nhớ được cấp phát và tôi muốn giải phóng nó. Vì vậy, sử dụng SIGTERM đơn giản từ cấp độ gốc sẽ không hiệu quả.

Tổng thể:

int sigusr1_count = 0;

void SenalTerminacion() {
++sigusr1_count;
}

tín hiệu(SIGUSR1, SenalTerminacion);

đứa trẻ :

Trong khi (1) {
if (sigusr1_count != 0) {
phá vỡ;
}
/*một số phép tính*/
}
print("Tràn ngăn xếp Hola\n");
/*giải phóng bộ nhớ*/
thoát (0);

Bố:

kill(pidChild, SIGUSR1);
chờ đợi(NULL);

Nếu tôi nhận xét dòng chờ đợi, mã sẽ hoạt động và hiển thị thông báo. Nhưng nếu tôi để lại thì chương trình sẽ bị treo. Tôi có thể tưởng tượng nếu đứa trẻ không đến vì một số điều kỳ lạ mà tôi không biết về tín hiệu và chờ đợi. Tôi có n đứa con. Cảm ơn bạn trước!

câu trả lời hay nhất

sigusr1_count có thể được lưu vào bộ đệm bởi tiến trình con/cha của bạn (trong tệp đăng ký - trình biên dịch thực hiện việc này) thay vì đọc từ bộ nhớ (hoặc được biên dịch đầy đủ không thay đổi trong tiến trình con). Đánh dấu nó dễ bay hơi để ngăn chặn cả hai:

dễ bay hơi int sigusr1_count=0;

Tốt hơn: Hãy cân nhắc sử dụng các ẩn dụ để báo hiệu giữa các quá trình thay vì các vòng lặp while(1) bận rộn.

Về c - dừng một lúc với tín hiệu (đúng), 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/28951364/

28 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress