如何在 SimGrid 中正确使用 MSG_host_set_property_value()?
How properly use MSG_host_set_property_value() in SimGrid?
有一位主持人:
<host id="Worker1" speed="1Mf" core="101"/>
此主机上只有一个进程部署:
<process host="Worker1" function="worker"/>
worker函数如下:
int worker(int argc, char *argv[])
{
MSG_host_set_property_value(MSG_host_self(), "activeCore", "0", xbt_free_f);
MSG_task_execute(MSG_task_create("kot", 10e6, 0, NULL));
XBT_INFO("I've executed some stuff and changed my value");
MSG_host_set_property_value(MSG_host_self(), "activeCore", "1", xbt_free_f);
return 0;
}
当我第二次使用 MSG_host_set_property_value
时,Segmentation fault
加注。
如何避免?
我知道 xbt_free_f
中的原因。如果我将其更改为 NULL
模拟将正常工作。但我担心这会影响生产力。
看着examples/msg/platform-properties/platform-properties.c 你应该写
MSG_host_set_property_value(MSG_host_self(), "activeCore", xbt_strdup("0"), xbt_free_f);
和
MSG_host_set_property_value(MSG_host_self(), "activeCore", xbt_strdup("1"), xbt_free_f);
有一位主持人:
<host id="Worker1" speed="1Mf" core="101"/>
此主机上只有一个进程部署:
<process host="Worker1" function="worker"/>
worker函数如下:
int worker(int argc, char *argv[])
{
MSG_host_set_property_value(MSG_host_self(), "activeCore", "0", xbt_free_f);
MSG_task_execute(MSG_task_create("kot", 10e6, 0, NULL));
XBT_INFO("I've executed some stuff and changed my value");
MSG_host_set_property_value(MSG_host_self(), "activeCore", "1", xbt_free_f);
return 0;
}
当我第二次使用 MSG_host_set_property_value
时,Segmentation fault
加注。
如何避免?
我知道 xbt_free_f
中的原因。如果我将其更改为 NULL
模拟将正常工作。但我担心这会影响生产力。
看着examples/msg/platform-properties/platform-properties.c 你应该写 MSG_host_set_property_value(MSG_host_self(), "activeCore", xbt_strdup("0"), xbt_free_f);
和
MSG_host_set_property_value(MSG_host_self(), "activeCore", xbt_strdup("1"), xbt_free_f);