コード例 #1
0
ファイル: p13-5.c プロジェクト: AKSahai/Linux_Programming
int main (void)
{
   pthread_t thread;
   int rv;
   pthread_attr_t attr;
   size_t stacksize, guardsize;
   char *stackaddr;
   pthread_attr_init(&attr);      /* 起始化執行緒屬性物件*/
   /* 申請用作執行緒堆疊的空間 */
   stackaddr = (void *)thread_stack_alloc(PTHREAD_STACK_MIN); 
   /* 設定執行緒屬性物件中的堆疊位址和大小 */
   rv = pthread_attr_setstack(&attr, stackaddr, PTHREAD_STACK_MIN); 
   check_error(rv, "pthread_setstack()");
   /* 檢視堆疊屬性值 */   
   pthread_attr_getstack(&attr, (void *)&stackaddr, &stacksize);
   pthread_attr_getguardsize(&attr, &guardsize);
   printf("stack attributes: stackaddr=%d, stacksize=%d, guardsize=%d\n", 
           stackaddr, stacksize, guardsize);
   /* 建立執行緒 */
   rv = pthread_create(&thread, &attr, (void *(*)())Hello, (void *)NULL);
   check_error(rv, "pthread_create()");
   pthread_attr_destroy(&attr);   /* 及時銷毀執行緒屬性物件,避免再次使用 */
   check_error(rv, "pthread_attr_destroy()");
   /* ... 後繼程式程式碼 ... */
   pthread_exit(NULL);
}
コード例 #2
0
ファイル: smp.c プロジェクト: rhdrjones/kvm-unit-tests
static void __smp_boot_secondary(int cpu, secondary_entry_fn entry)
{
	int ret;

	secondary_data.stack = thread_stack_alloc();
	secondary_data.entry = entry;
	mmu_mark_disabled(cpu);
	ret = cpu_psci_cpu_boot(cpu);
	assert(ret == 0);

	while (!cpu_online(cpu))
		wfe();
}