同一进程里,一个线程能访问另一个线程的栈吗?

aaseh 2012-06-09 09:14:02
同一进程里,一个线程能访问另一个线程的栈吗?
...全文
1665 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-06-10
  • 打赏
  • 举报
回复
[User:root Time:22:29:22 Path:/home/liangdong/c]$ cat src/main.c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

static int *ptr_num_of_a = NULL;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

void* thread_function_a(void *arg) {
int n = 10;

pthread_mutex_lock(&mutex);
ptr_num_of_a = &n;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&mutex);
while (ptr_num_of_a) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
printf("%d\n", n);
return NULL;
}
void* thread_function_b(void *arg) {
pthread_mutex_lock(&mutex);
while (ptr_num_of_a == NULL) {
pthread_cond_wait(&cond, &mutex);
}
++ (*ptr_num_of_a);
ptr_num_of_a = NULL;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);

return NULL;
}

int main(int argc, char* const argv[]) {
pthread_t tid_a, tid_b;
pthread_create(&tid_a, NULL, thread_function_a, NULL);
pthread_create(&tid_b, NULL, thread_function_b, NULL);
pthread_join(tid_a, NULL);
pthread_join(tid_b, NULL);
return 0;
}
[User:root Time:22:29:24 Path:/home/liangdong/c]$ ./output
11


给个例子,楼主参考。
恨天低 2012-06-10
  • 打赏
  • 举报
回复
这种需求不合理,很少这么做。
pathuang68 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

技术上可以实现,但这样搞的很少

想象一下:在一个函数里去尝试访问另一个函数的局部变量的情形,有多大的几率会这么干呢?
[/Quote]

++,就这个意思了。
挣扎中前行 2012-06-10
  • 打赏
  • 举报
回复
每个线程都有自己独立的栈,但属于统一进程的话做栈指针的移位是可以实现的··
Lactoferrin 2012-06-10
  • 打赏
  • 举报
回复
如果两个线程做好同步就可
wulin900515 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

别骗人
[/Quote]

楼主好搞笑啊……
独孤过儿 2012-06-10
  • 打赏
  • 举报
回复
技术上可以实现,但这样搞的很少

想象一下:在一个函数里去尝试访问另一个函数的局部变量的情形,有多大的几率会这么干呢?
清竹小雨 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:

别骗人


骗你我有钱赚? SX.
[/Quote]
锁定也可以?
qq120848369 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

别骗人
[/Quote]

骗你我有钱赚? SX.
Lactoferrin 2012-06-10
  • 打赏
  • 举报
回复
可以, 传址即可.
aaseh 2012-06-10
  • 打赏
  • 举报
回复
别骗人
qq120848369 2012-06-09
  • 打赏
  • 举报
回复
可以, 传址即可.

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧