[英]Ucontext gets blocked signal after swapcontext
例如,我在ucontext A 中阻止了一個SIGINT ,假設我在它運行時點擊了^C (SIGINT) ,但沒有按預期發生任何事情。 在上下文 B 中,有一個SIGINT處理程序。 當我swapcontext(A, B)然后ucontext B 立即執行信號處理程序。 即使上下文 A 是接收並阻止 ...
[英]Ucontext gets blocked signal after swapcontext
例如,我在ucontext A 中阻止了一個SIGINT ,假設我在它運行時點擊了^C (SIGINT) ,但沒有按預期發生任何事情。 在上下文 B 中,有一個SIGINT處理程序。 當我swapcontext(A, B)然后ucontext B 立即執行信號處理程序。 即使上下文 A 是接收並阻止 ...
[英]Get return value from ucontext as it terminates
我正在使用ucontext_t實現用戶級線程庫。 我通過uc_link將線程鏈接到調度程序線程,但是,在某些情況下我們需要獲取返回值。 由於上下文是分開的,我不知道如何獲取返回值。 我能想到的訪問返回值的唯一方法是以某種方式進入該上下文的堆棧並找到返回值的位置。 然而,這似乎是災難和奇怪錯誤的公式。 ...
[英]Address boundary error when invoke swapcontext()
我寫了一個簡單的程序,使用ucontext庫。 但是,出現信號 SIGSEGV(地址邊界錯誤) 。 運行環境是 MacOS。 我不知道我犯了什么錯誤? 此處更新:版本 2 正如@Jeremy 建議的那樣,我們可以在main_context和work_context 。 但是,如果我們將work_co ...
[英]How to call ucontext.h getcontext from inside a function
我正在嘗試將 getcontext 調用到另一個 function 中(而不是直接將其調用到 main 中),以便復制線程的堆棧並稍后恢復它。 此代碼應重復打印,但一旦調用 getcontext 的 function 返回,它將無法正常工作。 有沒有辦法繞過這個限制並在另一個 function ( ...
[英]Making yield function with timer in C
我想編寫一個代碼,每 10 微秒在線程之間切換一次。 但問題在於產量 function。 運行計時器處理程序時出現中斷。 所以它沒有正確完成。 這是我用於初始化計時器的代碼: 這是處理程序 function 的代碼: 這就是我在 yield function 中所做的事情:一個隊列,我們從中獲取接 ...
[英]`nanosleep()` async-signal safety on Linux
我需要在我的用戶空間線程庫中使用nanosleep function 來實現大約所需數量的等待,因為它可以在異步信號中斷的情況下節省剩余時間。 我使用 SIGALRM 搶先切換線程; 因此,重要的是要考慮使用不可重入函數的可能副作用。 出於這個原因,如果nanosleep調用被線程切換中斷並從另一個 ...
[英]Exit thread with return
我有一個小問題,我希望找到可以幫助的人。 我正在嘗試使用 ucontext 在 c 中開發一個線程庫,並且我已經為此開發了基本功能。 所以現在我的問題是我想考慮用戶用 return 而不是我的退出函數完成他的函數的情況。 是否可以知道線程上下文是否已完成並在用戶在其函數中使用 retutn 時獲取 ...
[英]How can I mask the warning from makecontext if the function passed in has parameters?
在 C 中使用來自<ucontext_t.h>的函數makecontext ,它接受參數(ucontext_t* context, void (*someFunction)(void), int numberOfArguments, ...) 。 numberOfArguments是將 ...
[英]Considering makecontext() what is uc_stack.ss_size good for?
在調用makecontext之前為什么我們需要設置堆棧大小ss_size ? 我剛剛有一個makecontext/swapcontext片段的單元測試用例,它失敗了SIGSEGV 。 發生的事情是堆棧大小太小,不相關的內存(碰巧是一些獨特的指針)被損壞並報告了段錯誤。 所以段錯誤是在這些不相關的指 ...
[英]Implementing a scheduler for a thread library
我正在使用makecontext() 、 getcontext()和swapcontext()在 C 中實現一個線程庫。 我需要實現一個調度程序,它每 5 毫秒調用一次,以便與另一個線程(循環)切換上下文。 我怎樣才能實現這個計時器功能? 如果我將計時器放在調度程序中,那么在調度程序未運行時將不可能 ...
[英]How to pass ellipsis argument to makecontext, which also accepts ellipsis argument in C?
我有一個運行其他函數的函數,這些函數可以有可變數量的參數。 然后將此函數的參數傳遞給makecontext ,它將函數附加到ucontext_t結構,但問題是此函數也采用可變數量的參數。 所以我的問題是,鑒於我無法更改makecontext ,如何將從函數獲得的省略號參數傳遞給makecontex ...
[英]Why is makecontext not calling my function?
我的程序包含以下行: 其中threadStart()定義為: 我認為這應該會導致顯示“Yes!Yes!5”,但這不會發生。 我不確定發生了什么。 我知道這條線正在運行,因為我在它下面有一個打印語句。 任何幫助表示贊賞。 ...
[英]makecontext producing void value?
我的問題涉及這一行: 沒有分配操作,我的程序就可以毫無錯誤地編譯,但是根本無法工作。 該行似乎無能為力。 當我添加“ int f =”時,編譯器給我錯誤: 我不知道這是怎么回事,因為ucontext應該總是返回0或-1。 任何幫助表示贊賞。 ...
[英]How to do multithreading with getcontext() and setcontext()?
如果我理解:多線程允許有多個執行線程。 所以在一個線程做某事的過程中,另一個線程在不等待另一個線程的情況下做其他事情。 但是當我使用getcontext()和setcontext() 時,我的印象是線程等待另一個線程繼續執行。 你能給我一個如何使用getcontext()和setcontext()做 ...
[英]Why does printing to stderr cause segmentation fault when dealing with ucontext?
我當時正在為一個操作系統課程設計一個項目。 任務是實現一個用於處理線程的庫,類似於pthreads ,但要簡單得多。 它的目的是練習調度算法。 最終產品是.a文件。 課程結束了,一切正常(就功能而言)。 雖然,我對自己遇到的問題感到好奇。 例如,在源文件的三個不同功能上,如果添加 ...
[英]How do I inform the compiler that `getcontext` can return multiple times?
getcontext可以多次返回。 例如,我繪制了一個類似於此處演示的 C 程序的草圖: 編譯並運行它 沒有給出預期的1 2 3因為編譯器認為i分配給comm->return_value時只能等於1 。 我可以通過定義i volatile來解決這個問題,但是我想要一個更規范的方法來 ...
[英]Context switching - Is makecontext and swapcontext working here (OSX)
我對上下文切換很開心。 我已將示例代碼復制到文件http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html 我為OSX定義了宏_XOPEN_SOURCE。 我建造它 gcc -o con ...
[英]Linux context switch internals: What happens when process exits before timer interrupt?
當進程在定時器中斷之前退出時,如何在linux內核中進行上下文切換? 我知道,如果該進程正在運行,發生定時器中斷,然后schedule功能自動如果標志設置調用,日程安排功能然后選擇下一個進程來運行。 基本上在這種情況下,調度函數在當前進程的上下文中運行,但是當進程在計時器中斷之前退出時會 ...
[英]Context switching executes same statement twice
我正在嘗試了解上下文切換的工作原理,以及如何在接收到特定信號后使您的流程切換上下文。 這是我的代碼 現在,我從終端發出命令'kill -s SIGUSR1'。 該過程在接收到該信號后切換上下文,但是問題是它兩次打印“%d時間的調用線程” 。 例如,如果線程1打印“ 第三次調用線 ...
[英]Why does srand(time(NULL)) gives me segmentation fault on main?
在這里需要一些幫助。 我想了解這段代碼中發生了什么。 我想,以產生隨機數tickets到TCP_t結構內部創建ccreate功能。 numbers over and over, for example: 問題是,每當我執行此代碼而沒有srand(time(NULL))它一遍又一 ...