这个线程上下文结构有什么作用?它的目的是什么?

时间:2015-10-07 00:43:51

标签: c linux multithreading

从“Motion”代码中提取

struct context {
char conf_filename[PATH_MAX];
int threadnr;
unsigned short int daemon;
char pid_file[PATH_MAX];

struct config conf;
struct images imgs;
struct trackoptions track;
struct netcam_context *netcam;
struct image_data *current_image;        /* Pointer to a structure where the image, diffs etc is stored */
unsigned short int new_img;

int locate;
struct rotdata rotate_data;              /* rotation data is thread-specific */

int noise;
int threshold;
int diffs_last[THRESHOLD_TUNE_LENGTH];
int smartmask_speed;

/* Commands to the motion thread */
volatile unsigned short int snapshot;    /* Make a snapshot */
volatile unsigned short int makemovie;   /* End a movie */
volatile unsigned short int finish;      /* End the thread */
volatile unsigned short int restart;     /* Restart the thread when it ends */
/* Is the motion thread running */
volatile unsigned short int running;
volatile int watchdog;

...
};

我猜测Linux中的一个程序显然不能只有一个进程,因此需要“线程”,就像java程序一样。

线程的一个常见问题是在它们之间切换,当然,这可以通过Linux操作系统完成,如果你愿意的话。

因此,我们需要一个上下文结构来保存我们执行此类操作所需的所有数据 - 因为运行所谓的线程显然需要一个上下文结构来存储所有重要信息。

所以最终你可以得到一个像上面所示的“context struct”数组,每个线程对应一个struct。

所以这是我的问题:

一个。我是否正确做出以上所有假设?或者我错过了100英里?我知道在某些时候,这些结构线程,或者至少是非常重要的一部分。

B中。除了保持对运行和切换线程至关重要的信息之外,这个结构还有什么用途?我知道代码不完整,所以这是一个相当开放的问题。鼓励基于以前的编码经验的答案。

℃。这样的做法常见吗?通过“这种做法”,我的意思是将您的应用程序划分为多个线程,并使用上下文结构来跟踪它们?

1 个答案:

答案 0 :(得分:0)

您在需要以异步方式处理数据的程序中使用线程,但是我不熟悉使用上下文结构,至少不在应用程序代码中。

只有内核需要这种信息。在应用程序中,您使用pthread_t变量来保留有关该线程的信息。