Chuẩn OpenMP 3.1 không nói gì về tín hiệu.
Như tôi biết, mọi triển khai OpenMP phổ biến trên Linux/UNIX đều dựa trên pthreads, do đó, chuỗi OpenMP là chuỗi của pthread. Và các quy tắc chung của pthreads và tín hiệu được áp dụng.
Liệu OpenMP cung cấp kiểm soát như vậy
Không bất kỳ kiểm soát cụ thể; nhưng bạn có thể thử sử dụng điều khiển của pthread. Chỉ có vấn đề là phải biết bao nhiêu chủ đề OpenMP được sử dụng và nơi đặt câu lệnh kiểm soát.
tín hiệu có thể được gửi đến bất kỳ luồng nào mà OpenMP tạo ra?
Theo mặc định, có, nó sẽ được gửi đến bất kỳ chuỗi nào.
xử lý của tôi được gọi,
quy tắc thông thường về xử lý tín hiệu vẫn được áp dụng. Các chức năng được phép trong bộ xử lý tín hiệu được liệt kê tại http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html (ở cuối trang)
Và printf
không được phép (write
). Bạn có thể sử dụng printf nếu bạn biết rằng tại thời điểm printf tín hiệu không được sử dụng bởi bất kỳ chủ đề nào (ví dụ: bạn không có printf trong vùng song song).
nó vẫn có thể giết chết một cách an toàn ứng dụng (exit (0);)
Có nó có thể: abort()
và _exit()
được phép từ xử lý.
Linux/Unix sẽ chấm dứt tất cả các chuỗi khi có chuỗi bất kỳ exit
hoặc abort
.
và làm những việc như khóa khóa OpenMP?
Bạn không nên, nhưng nếu bạn biết rằng khóa này sẽ không bị khóa tại thời điểm xử lý tín hiệu, bạn có thể thử thực hiện việc này.
!! CẬP NHẬT
Có ví dụ về việc áp dụng tín hiệu cho OpenMP http://www.cs.colostate.edu/~cs675/OpenMPvsThreads.pdf ("OpenMP so với luồng trong C/C++"). Trong ngắn hạn: thiết lập một lá cờ trong xử lý và thêm kiểm tra của lá cờ này trong mỗi thread tại mỗi vòng lặp Nth lặp đi lặp lại.
Thích ứng với một cơ chế ngoại lệ tín hiệu dựa trên một vùng song song
Cái gì đó xảy ra nhiều hơn với C C++ ứng dụng/rằng với các ứng dụng Fortran là chương trình sử dụng một giao diện người dùng tinh vi. Genehunter là một ví dụ đơn giản khi người dùng có thể làm gián đoạn việc tính toán một cây gia đình bằng cách nhấn control-C để nó có thể chuyển sang cây hộ gia đình tiếp theo trong cơ sở dữ liệu lâm sàng về bệnh . Việc chấm dứt sớm được xử lý trong phiên bản nối tiếp bằng C++ như cơ chế ngoại lệ liên quan đến bộ xử lý tín hiệu, setjump, và longjump.OpenMP không cho phép kiểm soát không có cấu trúc luồng để vượt qua ranh giới xây dựng song song. Chúng tôi sửa đổi xử lý ngoại lệ trong phiên bản OpenMP bằng cách thay đổi trình xử lý ngắt thành cơ chế bỏ phiếu . Chủ đề bắt tín hiệu điều khiển-C đặt cờ được chia sẻ. Tất cả các chủ đề kiểm tra cờ ở đầu vòng lặp bằng cách gọi thường lệ has_hit_interrupt() và bỏ qua phép lặp nếu được đặt. Khi vòng lặp kết thúc, thầy kiểm tra cờ và có thể dễ dàng thực hiện longjump để hoàn thành cảnh đặc biệt (Xem Hình 1.)
Có lẽ, điều này có thể được giải quyết bằng cách sử dụng một khối duy nhất mà bắt lối ra ? – Bort
Đặc tả OpenMP không chứa từ "tín hiệu". – jfs