ucontext

    0熱度

    1回答

    我已經定義了一個名爲thread的結構,其成員名爲ucontext* tctx。 在函數create_thread()中,我在堆上創建了一個線程對象並定義了它的每個成員(包括ucontext對象的成員)。然後我將該線程對象的指針添加到隊列容器中。 當我彈出隊列交換到線程的上下文時,我seg-fault。我不知道爲什麼會發生這種情況。 下面是完整的代碼: #include <iostream> #

    0熱度

    1回答

    我正在嘗試編寫一個程序,其中定義了兩個函數,一個打印奇數而另一個打印偶數。程序執行一段時間的功能,當它接收到一個報警信號時,它在保存當前函數的上下文後開始執行第二個函數。當它接收到下一個警報信號時,它將從其上次保存的上下文恢復執行第一個功能。 我已經使用了函數getcontext和swapcontext。 這裏是我的代碼: #include<stdio.h> #include<signal.h>

    0熱度

    3回答

    我在做一個線程庫(使用uncontext.h更改上下文)。 我的函數是void類型的,我不能返回。但是,即使我不回,編譯時出現此警告: dccthread.c: In function ‘dccthread_init’: dccthread.c:184:1: warning: ‘noreturn’ function does return [enabled by default] } 這是

    8熱度

    1回答

    去年我使用了操作系統,在此期間,我使用用戶上下文(在頭文件ucontext.h中定義)來實現項目的線程調度器(其中每個線程模擬一個進程)。我參加了一個講座,並將討論用戶上下文,而我想到,儘管去年完成了這個項目,但我並不十分了解系統調用實際上究竟做了什麼。 getcontext的手冊頁聲明它「將ucp指向的結構初始化爲當前活動的上下文。」它還指出,對於setcontext的參數,「如果ucp參數是使

    2熱度

    1回答

    我正在研究C編程中的上下文切換,並在Internet上找到以下示例代碼。我試圖弄清楚只有makecontext()函數可以觸發一個可以執行某些操作的函數。其他功能如setcontext(),getcontext()和swapcontext()用於設置上下文。 makecontext()將函數及其參數附加到上下文中,該函數是否始終堅持上下文,直到更改提交給它爲止? 1 #include <stdio

    1熱度

    2回答

    發現沒有這樣的文件我有我的代碼在這裏: #define _GNU_SOURCE #include "lib-ult.h" #include <stdio.h> #include <stdlib.h> #include <ucontext.h> #include <semaphore.h> #define TRUE 1 #define FALSE 0 #define FAIL

    0熱度

    1回答

    我想了解上下文切換如何工作以及如何在接收特定信號後使您的進程切換上下文。這裏是我的代碼 #include<stdio.h> #include<stdlib.h> #include<ucontext.h> #include<signal.h> #include<sys/time.h> #include<sys/types.h> #include<unistd.h> #define S

    -2熱度

    1回答

    我想創建線程庫。爲此,我試圖實現隊列來存儲等待執行的線程。 #include <ucontext.h> #include <stdio.h> #include <stdlib.h> typedef struct { ucontext_t context; }MyThread; #define MAX 20 MyThread

    8熱度

    2回答

    我一直在試圖理解爲什麼valgrind在使用ucontexts的這個小測試程序中抱怨「使用大小爲8的未初始化值」。 它基本上是一個程序,它創建「n_ucs」ucontexts並將它們切換爲「max_switch」次。 我明白「警告:客戶端切換堆棧?」 (這基本上是程序的一切),但我真的沒有任何意義,所有的「使用未初始化的大小8的值」 我想得到一些幫助理解,如果Valgrind錯誤是誤報或如果這個程

    4熱度

    1回答

    進程在定時器中斷之前退出時,如何在linux內核中進行上下文切換? 我知道如果進程正在運行並且定時器中斷髮生,那麼schedule函數會自動調用,如果標誌被設置,調度函數會選擇下一個進程來運行。基本上在這種情況下,調度函數在當前進程的上下文中運行,但是當進程在計時器中斷之前退出時會發生什麼?誰在這種情況下調用schedule函數?它在什麼情況下運行?