小编InQ*_*ive的帖子

如果线程在调用pthread_join之前退出会怎么样?

我有一个小代码

void *PrintHello(void *threadid)
{
   cout<<"Hello"<<endl;
   pthread_exit(NULL);
}

int main ()
{
   pthread_t threads_id;
   pthread_create(&threads_id, NULL, PrintHello, NULL);
   int i=0;
   for(;i<100;i++){cout<<"Hi"<<endl;}   
   pthread_join(threads_id,NULL);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在创作后的某个时候加入了这个帖子.如果主要尝试加入已经退出的线程会发生什么?

c c++ pthreads pthread-join

4
推荐指数
2
解决办法
3447
查看次数

当主要退出控制台输出的位置时?

#include<iostream>
#include<thread>
using namespace std;
void func()
{
    for (int i = 0; i < 10000; i++)cout << "Print" << endl;
}

int main()
{
    thread t(func);
    t.detach();
    cout << "Exit" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,当主要退出时,"Print"文本将在哪里消失,因为它没有输出流?是否存在用于插入无用的数据的虚拟流?

multithreading c++11

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

write_some vs write - boost asio

为什么有人想write_some在可能无法将所有数据传输到同行时使用?

来自boost write_some文档

write_some操作可能不会将所有数据传输到对等方.如果需要确保在阻塞操作完成之前写入所有数据,请考虑使用write函数.

write_some具有write方法时,方法在boost中的相关性是什么?我查看了boost write_some文档,我无法猜到.

c++ boost boost-asio

4
推荐指数
2
解决办法
1946
查看次数

为什么我们需要在boost中使用io_service?

我正在尝试学习Boost.asio库.现在我可以创建一个可以进行通信的客户端和服务器.

为什么我们需要定义一个io_service对象?因为如果这是套接字可用于注册/与底层操作系统通信的唯一对象类型,为什么我们必须无论如何都要定义它.套接字不能自动猜出来吗?我在这里错过了什么?

c++ networking boost boost-asio

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

为什么static_cast为同一个对象提供不同的内存位置?

我的代码

class Parent { int a; };
class Child { int b; };
struct GrandChild : public Parent, public Child { int a, b, c; };

int main() {
    GrandChild GC;
    std::cout << "GrandChild's address is at : " <<&GC<<endl;
    std::cout << "Child's address is at : " <<static_cast<Child*>(&GC)<<endl;
    std::cout << "Parent's address is at : " <<static_cast<Parent*>(&GC)<<endl;

}
Run Code Online (Sandbox Code Playgroud)

输出:

GrandChild's address is at : 0077F6F8
Child's address is at : 0077F6FC
Parent's address is at : 0077F6F8
Run Code Online (Sandbox Code Playgroud)

为什么在static_cast之后内存位置有如上所述的不一致?

c++ inheritance static-cast memory-address

3
推荐指数
2
解决办法
635
查看次数

C ++中的循环依赖问题

我今天在处理复杂库时遇到的一个极简循环依赖问题如下

class Something; 

class Test
{
   public:
   int i;
   void process()
   {
     Something S;
     S.doSomething();
   }
};

class Something
{
   public:
   void doSomething()
   {
     Test t;
     t.i = 10;
   }
};

int main()
{
   Test t;
   t.process();
}
Run Code Online (Sandbox Code Playgroud)

test.cxx:10:16:错误:聚合“ S事物”类型不完整,无法定义。

使这项工作最少的代码更改是什么?重新排列Testor Something类只会交换错误。我可以想到的一个方法是使用全局/静态函数,doSomething()其中的操作与Test t对象有关。有什么更好的方法?

c++

3
推荐指数
1
解决办法
50
查看次数

将基类对象分配给派生类对象

    class Base{};\n    class Derived: public Base{};\n\n    int main()\n    {\n        Base B;\n        Derived D;\n\n        Base B1 = D;//OK\n        Derived D1 = B;//error: conversion from \xe2\x80\x98Base\xe2\x80\x99 to non-scalar \n                       //type \xe2\x80\x98Derived\xe2\x80\x99 requested\n        return 1;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道派生类与基类具有 is-a 关系。

\n\n

什么阻止派生 D1 具有来自 B 的值以及具有某些垃圾值的剩余成员变量(如果有)?

\n\n

或者

\n\n

错误信息是什么意思

\n\n
\n

从 \xe2\x80\x98Base\xe2\x80\x99 到非标量类型 \xe2\x80\x98Derived\xe2\x80\x99 的转换请求 Derived D1 = B;

\n
\n\n

说?什么是标量类型?

\n

c++ inheritance

2
推荐指数
1
解决办法
1617
查看次数

pthread_mutex_errorcheck_np 初始化错误

下面的代码给了我编译错误:

#include<pthread.h>
#include<stdio.h>

pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
int i=0;
void *func(void *a)
{
    pthread_mutex_lock(&mutex);
    i++;
    printf("The value of thread is: %d\n",i);
    pthread_mutex_unlock(&mutex);
    pthread_exit(NULL); 
}

int main()
{
    pthread_t id1,id2;
    if(pthread_create(&id1,NULL,func,NULL)<0)
    perror("pthread_create error\n");
    pthread_join(id1,NULL);
    pthread_join(id2,NULL);

}
Run Code Online (Sandbox Code Playgroud)

错误是:

 error: invalid initializer
 pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
Run Code Online (Sandbox Code Playgroud)

我的 pthread.h 的相关内容是:

enum
{
  PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_ADAPTIVE_NP
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
  ,
  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
#endif
#ifdef __USE_GNU
  /* For compatibility.  */
  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP …
Run Code Online (Sandbox Code Playgroud)

c mutex pthreads

2
推荐指数
1
解决办法
3303
查看次数

为什么这个汇编代码没有将指针指向的值加倍

我正在尝试将 c 代码与 asm 接口。但它无法正常工作,我无法找到问题。

程序.c

#include<stdio.h>
int *asm_multi(int *ptr);

int main()
{
  int i=10;
  int *p=&i;
  asm_multi(p);
  printf("%d\n",*p);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码.asm

.section .text
.global asm_multi
.type asm_multi,@function
asm_multi:
    pushl %ebp
    movl %esp,%ebp
    movl 8(%ebp),%eax
    movl %eax,%edx
    leal (%edx,%edx,1),%edx
    movl %edx,%eax
    movl %ebp,%esp
    popl %ebp
    ret
Run Code Online (Sandbox Code Playgroud)

我正在创建最终的可执行文件

as code.asm -o code.o
gcc program.c code.o -o  output
./output
Run Code Online (Sandbox Code Playgroud)

它打印的输出是:10 而我期待的是:20

代码中有什么问题?不要考虑程序的效率。我刚刚开始 asm 编程。

在阅读了保存在此链接中的更复杂示例后,我创建了上述代码。这完美地工作。

c x86 assembly att

2
推荐指数
1
解决办法
61
查看次数

数量上的.size对红宝石意味着什么?

为什么我的红宝石给出的数字大小不正确?数字是什么并不重要.对于大小,输出始终为4.那是什么意思?我一直以为它应该给出位数.

number = 14
print number
print "\n"
print number.size
Run Code Online (Sandbox Code Playgroud)

输出:

14
4
Run Code Online (Sandbox Code Playgroud)

红宝石版

ruby 2.1.8p440 (2015-12-16 revision 53160) [i386-mingw32]
Run Code Online (Sandbox Code Playgroud)

ruby

2
推荐指数
1
解决办法
470
查看次数