小编ter*_*ry 的帖子

是否可以确定持有互斥锁的线程?

首先,我使用pthread库编写多线程C程序.线程总是被等待的互斥锁挂起.当我使用strace实用程序查找线程处于FUTEX_WAIT状态时,我想知道当时哪个线程持有该互斥锁.但我不知道怎么能做到.有没有公​​用事业可以做到这一点?

有人告诉我Java虚拟机支持这个,所以我想知道Linux是否支持这个功能.

c linux multithreading mutex pthreads

63
推荐指数
2
解决办法
5万
查看次数

对于pthread,如何从主线程中杀死子线程

我使用pthread_create创建了几个子线程.一次,主线程想要杀死所有子线程或者会有段falut.我应该用哪种功能来完成它?我从谷歌搜索了答案,得到了像pthread_kill这样的功能.但是我不知道应该向子线程发送哪个信号来杀死它们.我的运行环境是RHEL 5.4,编程语言是C.

c linux multithreading pthreads

19
推荐指数
3
解决办法
7万
查看次数

rand_r是否真的是线程安全的?

好吧,rand_r函数应该是一个线程安全的函数.但是,通过它的实现,我无法相信它本身不能被其他线程改变.假设两个线程将使用相同的变量种子同时调用rand_r.所以会发生读写比赛.由glibc实现的代码rand_r如下所示.谁知道为什么rand_r被称为线程安全?

 int
    rand_r (unsigned int *seed)
    {
      unsigned int next = *seed;
      int result;

      next *= 1103515245;
      next += 12345;
      result = (unsigned int) (next / 65536) % 2048;

      next *= 1103515245;
      next += 12345;
      result <<= 10;
      result ^= (unsigned int) (next / 65536) % 1024;

      next *= 1103515245;
      next += 12345;
      result <<= 10;
      result ^= (unsigned int) (next / 65536) % 1024;

      *seed = next;

      return result;
    }
Run Code Online (Sandbox Code Playgroud)

c c++

7
推荐指数
3
解决办法
9316
查看次数

为什么select()总是在第一次超时后返回0

当我使用Linux套接字程序时,我遇到有关select函数的问题.如果客户端在服务器配置的时间间隔内连接服务器端,那么select函数工作正常.如果超时发生,select函数将永远返回0.那时,我调试客户端,发现客户端已连接到服务器.但是select函数仍然返回0.我已经搜索了这个问题,但没有找到任何帮助.有人知道为什么选择那样吗?我的linux版本是RHEL5.4.谢谢您的帮助.

代码如下所示.

static const int maxLog = 10000;

int main()
{
    int servSock;
    signal(SIGPIPE, SIG_IGN);
    if((servSock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
    {
        printf("socket create fail\n");
        exit(-1);   
    }
    int val = 1;
    if(setsockopt(servSock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val))<0)
    {
        DieWithUserMessage("setsockopt error");
    }

    struct sockaddr_in serverAddr;
    memset(&serverAddr, 0, sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serverAddr.sin_port = htons(22000);

    if(bind(servSock, (struct sockaddr *) &serverAddr, 
                sizeof(serverAddr)) < 0)
    {
        printf("socket bind  fail\n");
        exit(-1);   
    }

    if(listen(servSock, maxLog) < 0)
    {
        printf("listen failed\n");
        exit(-1);
    } …
Run Code Online (Sandbox Code Playgroud)

c sockets linux

7
推荐指数
1
解决办法
9876
查看次数

我怎么知道进程正在运行哪个核心?

我目前正在开发一个关于在linux环境中将进程设置为一个核心的项目.我使用sched_setaffinity来完成这项工作,我想知道linux是否提供了一些函数来获取进程运行的核心.我使用top命令,发现它可以使用j选项获取此信息.所以我相信有一些方法可以在用户空间中获取此信息.

c linux process smp

4
推荐指数
1
解决办法
2559
查看次数

标签 统计

c ×5

linux ×4

multithreading ×2

pthreads ×2

c++ ×1

mutex ×1

process ×1

smp ×1

sockets ×1